我最近在websockets fin位和我的c ++服务器上遇到了一个小问题。每当我尝试使用FIN = 0时,主机都会无故断开连接。这是我计算FIN的代码的一部分:

string ret
ret += (unsigned char)((fin & 1) << 7) | (opcode & 63);


当我使用FIN = 1时,我在帧中的第一个字节为129,这是正确的,并且用户会获得正确的响应。在FIN = 0的情况下,第一个字节为1,这似乎也不错,然后在发送连接断开后发送。试图发送带有两个标志的相同数据包,并且只有FIN = 0失败;

为什么我尝试使用FIN = 0?好吧,我正在尝试制作一个Three.js + Websocket游戏,我希望服务器通过Websocket为所有玩家发送所有模型,所以我希望我能控制很重的负载。

我很乐意提供任何其他信息。

提前致谢。

最佳答案

我对C ++一无所知,但对WebSockets有所了解。

您在另一个字节中拥有哪个值?发送FIN = 0帧时,您仍然需要在其中发送帧选项。后续帧必须是“ Continuation”(继续)选项,并且别无其他。据我所记得,连续帧甚至不能具有不等于0的RSV位。

如果发送的FIN = 0帧没有类型(文本或二进制),则可能会失败。如果您发送的FIN = 1的类型不同于FIN = 0之后的“ Continuation”,则将失败。

所以关键是,第二个字节要发送什么?另外,如果您尝试使用Google Chrome浏览器并在控制台中检查为什么关闭了连接,那就太好了。

关于c++ - C++中的websocket鳍位,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24148311/

10-11 19:40