我目前正在一个大型项目中使用Erlang,但是我对合适的处理方式有疑问。
我通过TCP套接字接收字节。这些字节基于固定协议,发送方是一个Python客户端。Python客户端使用类继承来从对象创建字节。
现在,我希望(在Erlang中)将字节转换为它们对应的消息,它们都有一个共同的消息头。
如何以尽可能通用的方式在Erlang中实现此操作?
此致敬礼,
我
我目前正在一个大型项目中使用Erlang,但是我对合适的处理方式有疑问。
我通过TCP套接字接收字节。这些字节基于固定协议,发送方是一个Python客户端。Python客户端使用类继承来从对象创建字节。
现在,我希望(在Erlang中)将字节转换为它们对应的消息,它们都有一个共同的消息头。
如何以尽可能通用的方式在Erlang中实现此操作?
此致敬礼,
我
operation_type(<<"PUSH", Rest/binary>>) -> push(Rest);
operation_type(<<"PULL", Rest/binary>>) -> pull(Rest).
第一组字节之后的字节现在将会被存储在 Rest
中,这样你就可以顺序解释随后的任何标题或数据。你也可以匹配整个二进制:
operation_type(Bin = <<"PUSH", _/binary>>) -> push(Bin);
operation_type(Bin = <<"PULL", _/binary>>) -> pull(Bin).
filter_thingy(<<_:4/binary, Type:6/binary, Rest/binary>>) ->
% Do stuff with Rest based on Type...
上面我只涵盖了8位字节,但还有一种纯位字符串语法,它允许您根据需要轻松地深入比特和字节的细节。 在此处匹配是真正的救星。
希望这篇文章能够增加你的见识而不是让你更加困惑。在通用编程语言中,Erlang中的二进制语法使其成为最令人愉悦的二进制解析环境。
http://www.erlang.org/doc/programming_examples/bit_syntax.html