如何在Autobahn Wamp Protocol中获取客户端IP地址?

时间:2014-07-01 13:12:59

标签: python python-2.7 autobahn

我在Python中使用 Autobahn Wamp 进行套接字连接。我正在使用 PubSub 机制来建立连接。连接成功建立。

但是我找不到一种方法来维护服务器连接的客户端列表。

请任何人可以建议一种方法,借此我可以维护已连接客户端的IP地址列表,以及我可以使用相应地址向特定客户端发送回复的方式吗?

请尽早回复。

提前致谢

1 个答案:

答案 0 :(得分:1)

这是一个两部分问题。第一部分是询问如何识别连接的Web套接字的IP地址。第二部分是询问如何将消息定向到特定会话。 我将从第二部分开始。在上面的评论中有一个工厂变量。这可以在像这样的范围内的任何地方使用:

factory.dispatch("http://domain.com/topic", "payload", [ excluded sessions ], [ included sessions])

会话ID类似于TB15LhO8oS0MLsj6,并且可用于协议中的方法,例如self.session_id变量中的onSessionOpen,onClose。我做这样的事情:

ses_var = {} 

将它放在代码的顶部,一个全局变量。然后,在onSessionOpen():

def onSessionOpen(self):
    global ses_var

    ses_var[self.session_id] = self
    print "connection from ", self.peer.host, self.peer.port

此代码为您提供会话句柄。您需要管理此变量,并从onClose()方法中的变量中删除会话。

因此,如果您已经捕获了ses_var变量中的所有打开会话,那么您可以再次使用调度将消息发布到任何(和所有)它们:

    factory.dispatch("http://domain.com/topic", "payload", [],
      factory.sessionIdsToProtos(ses_var.keys()))

请注意,session_id不是预期的参数,您必须将id转换为实际的会话对象。

factory.dispatch中的两个数组定义了不向其发送消息的人员以及将消息发送给的人员。如果您将None作为第二个数组传递,您将向所有客户端发送一条消息,因此该示例的调度可以重写为:

    factory.dispatch("http://domain.com/topic", "payload", [], None)

如果您想将其发送到第一个会话(例如),您可以执行以下操作:

    factory.dispatch("http://domain.com/topic", "payload", [],
         factory.sessionIdsToProtos([ses_var[0].session_id]))