gpt4 book ai didi

javascript - 如果 onclick 处理程序大小超过 126,则 websocket 会从浏览器客户端重复发送。火狐/Chrome

转载 作者:行者123 更新时间:2023-11-28 07:43:03 26 4
gpt4 key购买 nike

当 onclick 事件内发生发送调用且消息大小超过 126 时,firefox/chrome 浏览器会发送双消息。我不确定这是否是 webkit/firefox/chrome 源中的错误。刚刚在 PHP Rachet 上确认了这个错误,尽管我没有使用它。也许 WebSockets 的规范最近发生了变化?

复制:从最新的 firefox/chrome 发送大于 126 字节的消息。看wireshark+接收端。客户端发送 2 帧。接收端获取完整帧,然后获取包含垃圾或部分内容的损坏帧。不过,帧头中的长度是对齐的,并且所有内容都被正确解析。

recved bytes: 293
Header[1] Len: 126
BuffLen: 293 DataLen: 187 Offset: 195
[Got msg]: {"type":"chat","opcode":"sendmessage","message":"faefaefafefaefaefaefafefaefaefaefafefaefaefaefafefaefaefaefafefaefaefaefafefaefa","name":"Karl","userid":114,"compid":1}

Header[1] Len: 92
BuffLen: 293 DataLen: 92 Offset: 293
[Got msg]: �y{"�pe�C"c�t"�[op�de�C"s�dm�
sa�",�es�ge�C"f�fa�af�ae�ef�fa�fa�ae�ef�ef�fa

如您所见,由于某种原因我们收到了 293 字节,第一条消息长度为 187 字节 + 8 字节 header 。然后我们遇到了解析垃圾,它被正确识别为 92 字节并解析到缓冲区的末尾。尺寸低于 126 时不会出现这种情况。

例如,如果在 onconnect 内发送帧,则不会发生这种情况。示例:

BuffLen: 178 DataLen: 170 Offset: 178
[Got msg]: {"type":"chat","opcode":"sendmessage","message":"eafffffffffffffffffffffffffffffffffffffffffffffffffaeggaegaeaeg","name":"Karl","userid":114,"compid":1}

我认为这可能是一个框架/调度问题,数据包应该排队发送?

最佳答案

发送不是线程安全的。与文档所说的不同。要复制,请同时从 2 个事件处理程序调用 send 两次。

关于javascript - 如果 onclick 处理程序大小超过 126,则 websocket 会从浏览器客户端重复发送。火狐/Chrome,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27789653/

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