您好我正在尝试使用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)
它适用于一个网页,但如果我使用两个客户端(两个网页连接到相同端口上的同一个套接字服务器),脚本的工作方式相同。
我想要做的是让套接字服务器为回传的任何消息广播这些消息,应该由两个客户网页监听。但不可思议它不起作用。我很困惑,因为两个页面都在监听相同的套接字,那为什么它不起作用。
我是否需要做任何解决方法或修改,以便我可以使套接字服务器向所有连接的客户端传输消息或广播。
请帮忙......
答案 0 :(得分:3)
除了多播套接字外,所有都是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
答案 1 :(得分:0)
我认为问题是每次新呼叫都会重置连接变量。
所以我改变了代码来初始化连接变量,只有它尚未定义:
try:
connections
except:
connections = []
现在它应该工作了。