2012-09-06 54 views
2

我想實現我自己的WebSocket服務器和正在運行到一點與在JavaScript中的onMessage功能的麻煩。它只是不會開火!我把一個警報放進去,每當它被調用時都會觸發,並且警報永不出現。我試過Firefox和Chrome都無濟於事。的WebSocket的onMessage不點火

至於我可以告訴大家,我的服務器發送正確的消息還有,當我把它翻譯成十六進制,它完美地與實例相匹配的文檔,這裏的第5.7節:

http://datatracker.ietf.org/doc/rfc6455/?include_text=1

所以我不完全確定我做錯了什麼。握手工作正常,結束時也是如此。這裏是我目前發送郵件的代碼:

formatted_bytes = [] 
formatted_bytes.append(129) 

message_bytes = bytearray(message) 

data_start = 0 

if (len(message_bytes) <= 125): 
    formatted_bytes.append(len(message_bytes)) 
    start = 2 

for byte in message_bytes: 
    formatted_bytes.append(byte) 

client_socket.send(bytes(formatted_bytes)) 

服務器是用python編寫的,忘記提及了。

+0

我認爲,我們需要看到的服務器端代碼。我對此不太瞭解,但我認爲這可能是因爲缺少Web套接字握手。 –

+0

嘗試打開你的JavaScript開發者控制檯,看看你是否得到任何錯誤/警告。另外,你確定握手是否正確地發生了(即onopen處理程序是否觸發?)你是否有一個onclose處理程序來確保連接後沒有錯誤? – kanaka

+0

@Amaan這是服務器端代碼。握手工作正常,onopen事件在javascript中正確觸發。 –

回答

4

這是相同的答案爲您的其他問題:Compressed bit must be 0 when sending a message to websocket client

你的問題是,您使用的是蟒蛇2.X的bytes功能,但希望它的工作它在蟒蛇的方式3.X

python2.6.6:

>>> bytes([129, 19]) 
'[129, 19]' 

蟒3:

>>> bytes([129, 19]) 
b'\x81\x13' 

通過與服務器代碼如下替換髮送我的作品在python2.X:

client_socket.send("".join([chr(c) for c in formatted_bytes]) 

一對夫婦的其他注意事項:

  • 您鏈接到的代碼將消息長度加1不正確。

  • 你要真有握手代碼從正常的消息解析代碼分開。如果有人碰巧發送了一條包含「Sec-WebSocket-Key:」的消息,那麼您最終會通過再次發送原始握手來破壞流。