WebSocket onmessage没有触发

时间:2012-09-06 16:14:12

标签: javascript python websocket

我正在尝试实现自己的websocket服务器,并且在JavaScript中的onmessage函数遇到了一些麻烦。它不会开火!我发出一个警报,只要它被调用就会触发,警报永远不会出现。我试过firefox和chrome都无济于事。

据我所知,我的服务器也发送了正确的消息,当我将其翻译成十六进制时,它与文档第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编写的,忘了提及。

1 个答案:

答案 0 :(得分:4)

这与您的其他问题的答案相同:Compressed bit must be 0 when sending a message to websocket client

你的问题是你在python 2.X中使用bytes函数,但期望它在python 3.X中的工作方式

python2.6.6:

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

python 3:

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

通过在服务器代码中使用以下内容替换发送,它在python2.X中适用于我:

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

其他几点说明:

  • 您链接的代码是在消息长度上加1,这是不正确的。

  • 您应该将握手代码与正常的消息解析代码分开。如果有人碰巧发送了包含“Sec-WebSocket-Key:”的消息,你最终会再次发回原始握手来破坏流。

相关问题