2011-10-07 60 views
2

您好,我正在嘗試使用python的pywebsocket HTML5服務器,在那裏我使用給定的示例文件,它回顯接收到的任何內容。Python「pywbsocket」HTML5 websocket服務器配置問題?

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網頁收聽。但不可思議的是它不起作用。我很困惑,因爲兩個頁面都在同一個套接字上偵聽,那麼爲什麼它不工作。

是否有任何解決方法或修改我需要做,以便我可以使套接字服務器傳輸消息或廣播到其所有連接的客戶端。

請幫忙...

+0

有人嗎?仍然在等待...... :( – Johnydep

回答

3

除了多播套接字,所有的連接都是1:1。您必須在某個地方維護打開的套接字列表,並將消息發送給它們中的每一個。您在創建套接字時連接的端口僅相同,這意味着每個客戶端都連接到相同的服務。

下面介紹如何將每個連接添加到列表並向所有人廣播。當然,我強烈建議有代碼來處理死亡和/或關閉的連接,並將它們從列表中刪除,我只想在這裏提出一般想法(特別是因爲我沒有用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 
+0

它不工作,這是我有同樣的問題,我不精通python,它不知道怎麼工作。 – Johnydep

+0

它可能會創建一個列表包含每個連接客戶端,你必須弄清楚如何將所有的請求填充到同一個列表中(或者希望有人更熟練地使用Python併爲你計算出來)。 –

+0

謝謝,你的信息是有道理的,所以我會給它一試。 – Johnydep

0

的問題是我想,連接變量在每次新的呼叫時都會重置。

所以我改變了代碼初始化連接變量只有當它尚未定義:

try: 
    connections 
except: 
    connections = [] 

現在,它應該工作。