2012-09-06 55 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:”的消息,那么您最终会通过再次发送原始握手来破坏流。