【问题标题】:How to obtain the client IP address in Autobahn Wamp Protocol?如何在 Autobahn Wamp 协议中获取客户端 IP 地址?
【发布时间】:2014-07-01 13:12:58
【问题描述】:

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

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

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

请尽早回复。

提前致谢

【问题讨论】:

  • 高速公路 wamp v1 还是 v2?另外,你究竟是如何建立连接的? -g
  • 版本为 0.8.9。我以下列方式建立连接:- if len(sys.argv) > 1 and sys.argv[1] == 'debug': log.startLogging(sys.stdout) debug = True else: debug = False log.startLogging( sys.stdout) connectionString="ws://"+str(args.host)+":"+str(args.port) factory = WampServerFactory(connectionString , debugWamp = True) factory.protocol = MyWampServer factory.setProtocolOptions(allowHixie76 = True) listenWS(factory) print "Server started at %s" % connectionString reactor.run()
  • 我正在使用的 Wamp v1

标签: python python-2.7 autobahn


【解决方案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]))

【讨论】:

  • 嗨,格雷格。非常感谢您的回复。我在查找“self.peer.host”时遇到了问题。另外我想知道在客户端(html)上写什么函数来获取从服务器发送的数据。
  • 嗨。我解决了有关同行的问题。如果您提供一种在客户端(Html)显示从服务器发送到客户端的消息的方法,那就太好了
  • 如果它回答了您最初发布的问题,请接受此答案。您可以发布有关客户端 html 的另一个问题。 -g
猜你喜欢
  • 2013-08-01
  • 2012-03-14
  • 2012-02-16
  • 2019-01-14
  • 2021-10-22
  • 1970-01-01
相关资源
最近更新 更多