我最近有一个小问题与websockets fin bit和我的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帧时,你仍然需要发送其中的帧选项。后续帧必须是"延续"选项,而不是其他选项。据我所知,延续帧的RSV位甚至不能不同于0。
如果你发送一个没有类型(文本或二进制)的FIN=0帧,它可能会失败。如果在FIN=0之后发送FIN=1的类型与"Continuation"不同,则会失败。
关键是,第二个字节要发送什么?此外,这将是伟大的,如果你尝试与谷歌Chrome浏览器,并检查在控制台为什么连接被关闭。
OPCODE:
|Opcode | Meaning | |
-+--------+-------------------------------------+-----------|
| 0 | Continuation Frame | |
-+--------+-------------------------------------+-----------|
| 1 | Text Frame | |
-+--------+-------------------------------------+-----------|
| 2 | Binary Frame | |
-+--------+-------------------------------------+-----------|
| 8 | Connection Close Frame | |
-+--------+-------------------------------------+-----------|
| 9 | Ping Frame | |
-+--------+-------------------------------------+-----------|
| 10 | Pong Frame | |
-+--------+-------------------------------------+-----------|