2015-04-25 70 views
2

我用一個簡單的基於Python的網絡套接字應用程序的所有客戶端:的WebSocket廣播使用Python

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

呼應每個客戶端發送到同一個人客戶端的消息,但II正試圖發送接收到的任何消息由ws服務器連接到所有的客戶端。有人能幫助我嗎?

+0

你想的WebSocket聊天。這是在websocket世界helloworld,很容易找到與谷歌。 – michaldo

回答

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' 
+0

其實我做到了這一點,事實證明這是比以前更好的解決方案。由於陣列管理導致該崩潰 – xProgramery

1

我想你想創建一個列表客戶端,然後主動發送消息給他們每個人。

所以,當一個新的客戶端連接,將它們添加到一個數組:

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

棒極了!這完全符合我的需要。你是最棒的! – xProgramery