websocket 对于 raw socket

2015-05-22  本文已影响803人  yueyoum

这里 raw socket 指的就是 直接使用 posix socket api

为什么会有这个对比呢?
因为最近我在做 websocket 测试的时候 ( nodejs, c#, erlang), 发现 websocket 确实方便。

就拿 c# 举例子

但是 担心 websocket 发送的数据包 体积过大,造成不必要的网络浪费,于是估算了一下 websocket 一个 frame 比 一个 raw tcp 包到底多 多少 字节。

websocket 包格式

websocket 有自己定义的 frame 格式 https://tools.ietf.org/html/rfc6455

frame.jpg

每一个 frame 包含 头部 2Bytes 的固定长度,后面根据发送的数据长度可能会包含 0/2/8 Bytes 的长度

如果是客户端发给服务器的,那么还要包含 4Bytes 的Masking-key长度。

raw socket 包格式

+---------+--------------+
| Header  |    Body      |
+---------+--------------+

Header 表示 Body 长度, 一般 都是 2 Bytes, 或者 4 Bytes .
下面用 4 Bytes 做对比。

包体额外长度对比

根据要发送数据的长度,将对比分为以下情况:

A: 数据长度<= 125

B: 数据长度<= 2^16

C: 数据长度 <= 2^32

D: 数据长度 <= 2^64

websocket比raw socket多出字节数

+---------------------------------------------------+
|  数据长度   |   125   |   2^16  |  2^32  |  2^64   |
+------------+---------+---------+--------+---------+
| 客户端多出  |    2    |    4    |   10   |    6    |
+------------+---------+---------+--------+---------+
| 服务端多出  |   -2     |    0    |   6     |    2    |
+------------+---------+---------+--------+---------+

结论

但是在快速容易开发的角度看,还是可以接受的。

上一篇下一篇

猜你喜欢

热点阅读