gpt4 book ai didi

javascript - WebSocket onmessage 未触发

转载 作者:行者123 更新时间:2023-11-28 23:00:15 28 4
gpt4 key购买 nike

我正在尝试实现我自己的 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 中那样工作

python 2.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:”的消息,您最终会通过再次发回原始握手来破坏流。

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

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com