javascript - WebSocket onmessage 未触发

标签 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编写的,忘记说了。

最佳答案

这与您的其他问题的答案相同: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'

通过在服务器代码中将 send 替换为以下内容,它在 python2.X 中对我有用:

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

其他一些注意事项:

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

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

关于javascript - WebSocket onmessage 未触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12304216/

相关文章:

Python 诗歌 : Where is get-poetry. py?

python - 在 macOS 10.15.1 上执行以不安全方式加载 libcrypto 的脚本

python - 断点在带有 openerp 7.0 的 eclipse Juno 中不起作用

javascript - Jquery 不会将 hide() 应用于具有相同 ID 的所有 div

javascript - static 是严格模式的保留关键字

javascript - Javascript 倒计时时钟不会显示

java - 通过流进行二进制与字符串传输

html - 如何在网络套接字 header 中设置 Sec-WebSocket-Key?

php - Ratchet - 如何阻止其他网站连接到我的 websocket 服务器?

javascript - 如何在非事件选项卡中获取元素的位置