|
|
1
161
注意:这是关于如何实现一个非常琐碎的服务器的一些解释和伪代码,该服务器可以根据最终的帧格式处理传入和传出的WebSocket消息。它不包括握手过程。此外,这一回答是出于教育目的;它不是一个功能齐全的实现。 发送消息(换句话说,服务器浏览器) 您发送的帧需要根据WebSocket帧格式进行格式化。对于发送消息,此格式如下:
第一个字节将是
第二个字节的第一位设置为
有必要确定原始数据的长度,以便正确发送长度字节:
长度必须被分割成单独的字节,这意味着你需要向右移位(数量为8位),然后只保留最后8位
长度字节之后是原始数据。 这将导致以下伪代码:
正在接收消息(换句话说,浏览器服务器) 您获得的帧采用以下格式:
第一个字节通常并不重要——如果你只是发送文本,那么你只使用文本类型。会的
第二个字节和另外的两个或八个字节需要一些解析,因为您需要知道长度使用了多少字节(您需要知道实际数据从哪里开始)。长度本身通常是不必要的,因为您已经有了数据。
第二个字节的第一位总是
四个掩码字节用于对已发送的实际数据进行解码。解码算法如下:
哪里
这导致以下用于解码的伪代码:
|
|
|
2
25
Java实现(如果有人需要) 正在读取:客户端到服务器
写入:服务器到客户端
|
|
|
3
18
JavaScript实现:
|
|
|
4
13
C#实现 浏览器->服务器
服务器->浏览器
|
|
|
5
6
pimvdb的答案在python中实现:
用法示例:
|
|
|
6
5
除了PHP帧编码函数外,下面还有一个解码函数:
我已经在一个易于使用的WebSocket PHP类中实现了这个以及其他函数 here 。 |
|
|
7
4
PHP实现:
|
|
|
8
4
谢谢你的回答,我想补充一下 hfern的 (上图)Python版本,如果有人感兴趣,可以包含Sending函数。
阅读用途:
书写用法:
|
|
|
9
2
围棋中的实施 编码部件(服务器->浏览器)
解码部分(浏览器->服务器)
|
|
|
10
2
Clojure,decode函数假设帧作为的映射发送
此处发布的代码: https://gist.github.com/viperscape/8918565
|
|
|
12
0
已更新 Haribabu Pasupathy 处理TCP分段的代码。在我的案例中,浏览器发送的大于1024字节的websocket数据包被拆分为TCP段,因此需要重新组装。
|
|
|
13
0
我修复了>Nitij的C#实现中的65535消息长度问题。
|
|
|
user8040474 · 网络连接不工作 8 年前 |
|
|
Genhain · swift中链式泛型类型推断闭包 8 年前 |
|
|
Joe · 将数据从子VC传回集合视图单元格 8 年前 |
|
|
NaderBesada · 协议字典Swift 4 8 年前 |
|
|
Marmelador · 通过协议更改代理的属性 8 年前 |