自版本8起,Websocket协议(protocol)已完全更改。现在,来自浏览器的传入消息格式非常不同,对我来说确实很复杂。
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-------+-+-------------+-------------------------------+
|F|R|R|R| opcode|M| Payload len | Extended payload length |
|I|S|S|S| (4) |A| (7) | (16/64) |
|N|V|V|V| |S| | (if payload len==126/127) |
| |1|2|3| |K| | |
+-+-+-+-+-------+-+-------------+ - - - - - - - - - - - - - - - +
| Extended payload length continued, if payload len == 127 |
+ - - - - - - - - - - - - - - - +-------------------------------+
| |Masking-key, if MASK set to 1 |
+-------------------------------+-------------------------------+
| Masking-key (continued) | Payload Data |
+-------------------------------- - - - - - - - - - - - - - - - +
: Payload Data continued ... :
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
| Payload Data continued ... |
+---------------------------------------------------------------+
这是我从http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-17找到的
有人知道如何实现用c++或C#读取的服务器端吗?还是您有一个指向已经有效的示例的链接?
我知道此服务器是正确的,但是我需要一个代码:http://websocket.org/echo.html
最佳答案
我已经写了C++ server。有关如何读取hybi-17消息的信息,请参见WsProtocol80::Read()
。请注意,服务器使用自定义的字符串和套接字类,因此重用并非易事,但是您应该能够轻松地跟踪正在读取/写入的数据。
随意询问有关代码特定部分的任何问题。
此wiki post也可能很有趣。