WebSocket使用Python向所有客户端广播

时间:2015-04-25 22:18:51

标签: python websocket stream chat broadcast

我使用的是基于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服务器收到的任何消息发送给连接到它的所有客户端。有人能帮帮我吗?

3 个答案:

答案 0 :(得分:1)

我认为你想创建一个列表客户端,然后以progamatically方式向每个客户端发送一条消息。

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

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))

我希望这可以帮到你!

答案 1 :(得分: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 :(得分:0)

添加此内容可在客户端断开连接以便阵列中没有未连接人员的情况下删除

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