你好,我正在尝试使用python的pywebsocket HTML5服务器,在那里我使用给定的示例文件,该文件返回收到的任何内容。
def web_socket_transfer_data(request):
count = 0
while (count < 1):
line = request.ws_stream.receive_message()
print line
request.ws_stream.send_message(line)
它与一个网页工作得很好,但如果我使用两个客户端(两个网页连接到相同的套接字服务器通过相同的端口),脚本工作相同。
我想做的是有这些消息广播的套接字服务器的任何消息回,应该由两个客户端网页收听。但不幸的是,它不起作用。我很困惑,因为两个页面都在同一个套接字上监听,那么为什么它不工作。
是否有任何解决方案或修改,我需要这样做,我可以使套接字服务器传输消息或广播到所有连接的客户端。
请帮…
除组播套接字外,均为1:1连接。您必须在某个地方维护打开的套接字列表,并将消息发送给每个套接字。创建套接字时连接的端口相同仅仅意味着每个客户端连接到相同的服务。
下面是如何将每个连接添加到列表并向所有这些连接广播的方法。当然,我强烈建议编写代码来处理死亡和/或关闭的连接,并将它们从列表中删除,这里我只是遵循一般的想法(特别是因为我已经好几年没有用Python编写代码了)。我将此代码片段基于pywbsocket示例代码,这就是它与您的代码不同的原因。请注意,我也没有考虑线程安全,这应该是一个问题)
connections = []
def web_socket_do_extra_handshake(request):
connections.append(request);
pass
def web_socket_transfer_data(request):
while True:
line = msgutil.receive_message(request)
for connection in connections[:]:
msgutil.send_message(connection, line)
if line == "Bye":
return
问题是连接变量在每次新调用时重置,我认为。
所以我修改了代码,只在connections变量尚未定义时才初始化它:
try:
connections
except:
connections = []
现在它应该工作了。