【发布时间】:2014-09-09 10:02:55
【问题描述】:
我正在编写运行以下协议的 erlang tcp-server。
- 每个数据包的大小正好为 4 个字节。
- 有一个特殊情况的数据包 -
<<?SPECIAL_BYTE, 0, PayloadLength:2/big-unsigned-integer-unit:8>>。此数据包表明,该服务器必须读取下一个PayloadLength字节的原始数据。
当然,我可以接收原始数据流并用 erlang 代码解析这个协议。但我想知道,有没有办法使用内置的 erlang 数据包打包?当我的数据包前面有它的长度时,我可以说 [{packet, HeaderLength}]。有什么办法可以强制erlang将接收到的数据自动打包成4字节的chuks?
UPD:我打算使用 {active, once} 模式。我也可以使用 gen_tcp:recv(Socket, 4),但我担心在这种情况下会因为多个套接字读取而降低性能。我的恐惧有道理吗?
【问题讨论】: