Erlang服务器,Java客户端-TCP消息被拆分了吗?

Erlang服务器,Java客户端-TCP消息被拆分了吗?,第1张

Erlang服务器,Java客户端-TCP消息被拆分了吗?

您需要在服务器和客户端之间定义协议,以将TCP流拆分为消息。TCP流分为数据包,但不能保证这些数据包与您的发送/写入或接收/读取调用相匹配。

一个简单而强大的解决方案是为所有消息添加一个长度前缀。Erlang可以使用

{packet,1|2|4}
选项透明地执行此 *** 作,其中前缀以1、2或4个字节编码。您将必须在Java端执行编码。如果选择2或4个字节,请注意长度应以big-
endian格式编码,
DataOutputStream.outputShort(int)
DataOutputStream.outputInt(int)
java方法使用的字节顺序相同。

但是,从您的实现看来,您确实有一个隐式协议:您希望服务器单独处理每一行。

幸运的是,Erlang也对此进行了透明处理。您只需要传递

{packet,line}
选项。但是,您可能需要调整接收缓冲区,因为该缓冲区将被截断更长的行。这可以通过
{recbuf, N}
选项来完成。

因此,只需重新定义选项即可完成您想要的 *** 作。

-define(MAX_LINE_SIZE, 512).-define(TCP_OPTIONS, [list, {packet, line}, {active, false}, {reuseaddr, true}, {recbuf, ?MAX_LINE_SIZE}].


欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/zaji/5488572.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-12-12
下一篇2022-12-12

发表评论

登录后才能评论

评论列表(0条)

    保存