Python "pywbsocket" HTML5 WebSocket服务器配置问题?
你好,我正在尝试使用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)
这个在一个网页上运行得很好,但如果我用两个客户端(两个网页同时连接到同一个socket服务器,使用相同的端口),脚本的表现还是一样。
我想要实现的是,当socket服务器发送消息时,所有连接的网页都能收到这些消息。可惜的是,这并没有成功。我很困惑,因为两个网页都是通过同一个socket在监听,那为什么它们收不到消息呢?
我需要做什么修改或者有什么解决办法,让socket服务器能够把消息传送或广播给所有连接的客户端吗?
请帮帮我...
2 个回答
0
问题是每次调用的时候,连接的变量都会被重置,我觉得是这样。
所以我把代码改了一下,只有在连接变量还没有定义的时候才去初始化它:
try:
connections
except:
connections = []
现在应该可以正常工作了。
3
除了多播套接字,其他的连接都是一对一的。也就是说,你需要在某个地方维护一个打开的套接字列表,然后把消息发送给每一个连接的客户端。你在创建套接字时连接的端口相同,仅仅意味着每个客户端都连接到了同一个服务。
下面是一个如何将每个连接添加到列表中,并向所有连接广播消息的示例。当然,我强烈建议你写一些代码来处理已经失效或关闭的连接,并把它们从列表中移除。我这里只是想传达一个大概念(尤其是因为我已经有几年没用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