【问题标题】:Python "pywbsocket" HTML5 websocket server Configuration Issue?Python“pywbsocket”HTML5 websocket服务器配置问题?
【发布时间】:2011-10-07 17:32:30
【问题描述】:

您好,我正在尝试使用 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)  

它适用于一个网页,但如果我使用两个客户端(两个网页通过相同的端口连接到同一个套接字服务器),脚本的工作方式相同。

我想要做的是让套接字服务器广播的任何消息回显的那些消息,应该被两个cient 网页监听。但不幸的是,它不起作用。我很困惑,因为两个页面都在监听同一个套接字,那么为什么它不起作用。

我需要做任何解决方法或修改,以便我可以使套接字服务器传输消息或向其所有连接的客户端广播。

请帮忙...

【问题讨论】:

    标签: python html websocket


    【解决方案1】:

    除了多播套接字之外,都是 1:1 连接。您必须在某处维护打开的套接字列表,并将消息发送给它们中的每一个。创建套接字时连接的端口相同仅表示每个客户端都连接到相同的服务。

    以下是您可以如何将每个连接添加到列表并向所有连接广播的方法。当然,我强烈建议使用代码来处理死连接和/或关闭连接并将它们从列表中删除,我只是在这里寻求一般想法(特别是因为我没有在 Python 中编写过一些代码多年。我将此代码 sn-p 基于 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
    

    【讨论】:

    • 它不起作用,这和我有同样的问题,我不精通python,而且它根本不起作用。
    • 它可能正在为每个客户端创建一个包含一个连接的列表。您必须弄清楚如何将所有请求填充到同一个列表中(或者希望有更精通 Python 的人来为您解决。)
    【解决方案2】:

    我认为,问题是连接变量在每次新调用时都会重置。

    所以我更改了代码以仅在尚未定义连接变量的情况下对其进行初始化:

    try:
        connections
    except: 
        connections = []
    

    现在应该可以了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-15
      • 1970-01-01
      • 2010-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-31
      相关资源
      最近更新 更多