【问题标题】:WebSocket broadcast to all clients using PythonWebSocket 使用 Python 向所有客户端广播
【发布时间】:2015-07-04 11:12:24
【问题描述】:

我正在使用一个简单的基于 Python 的 Web 套接字应用程序:

from SimpleWebSocketServer import WebSocket, SimpleWebSocketServer

class SimpleEcho(WebSocket):

    def handleMessage(self):

        if self.data is None:
            self.data = ''

        # echo message back to client
        self.sendMessage(str(self.data))

    def handleConnected(self):
        print self.address, 'connected'

    def handleClose(self):
        print self.address, 'closed'

server = SimpleWebSocketServer('', 8000, SimpleEcho)
server.serveforever()

它将每个客户端发送到同一个客户端的消息回显,但我试图将 ws 服务器接收到的任何消息发送到连接到它的所有客户端。有人可以帮帮我吗?

【问题讨论】:

  • 你想和 websocket 聊天。它是websocket世界中的helloworld,用google很容易找到。

标签: python websocket stream chat broadcast


【解决方案1】:

或者你可以这样做:

class SimpleEcho(WebSocket):

    def handleMessage(self):
        if self.data is None:
            self.data = ''

        for client in self.server.connections.itervalues():
            client.sendMessage(str(self.address[0]) + ' - ' + str(self.data))

        #echo message back to client
        #self.sendMessage(str(self.data))

    def handleConnected(self):
        print self.address, 'connected'

    def handleClose(self):
        print self.address, 'closed'

【讨论】:

  • 实际上我这样做了,结果证明它比以前的解决方案更好。那个因为阵列管理而崩溃
  • 但是我猜使用循环不是一个好方法。如果我们有更多的客户端(数组中有更多的值),那么消息将被延迟到最后的客户端。这可能是一些微不足道的差异。但是如果你想一次发送所有连接的客户端的时间,那么你可以找到毫秒的差异。
【解决方案2】:

我认为您想创建一个客户列表,然后以编程方式向每个客户发送消息。

因此,当新客户端连接时,将它们添加到数组中:

wss = [] # Should be globally scoped

def handleConnected(self):
    print self.address, 'connected'
    if self not in wss:
        wss.append(self)

然后,当您收到新请求时,将消息发送到存储的每个客户端:

def handleMessage(self):
    if self.data is None:
        self.data = ''

    for ws in wss:
        ws.sendMessage(str(self.data))

希望对你有帮助!

【讨论】:

  • 真棒詹姆斯!这正是我想要的方式。你是最棒的!
【解决方案3】:

如果客户端断开连接,则添加此项以删除,因此阵列中没有充满未连接的人

def handleClose(self):
    wss.remove(self)

【讨论】:

    猜你喜欢
    • 2011-03-10
    • 2019-04-01
    • 2019-05-05
    • 2018-11-14
    • 2019-09-20
    • 2017-05-26
    • 2019-12-01
    • 1970-01-01
    相关资源
    最近更新 更多