在聊天服务器上工作,我需要通过erlang的gen_tcp接收json。
一种方法是发送4byte int标头,这是一个好主意,因此,如果它们超过最大长度,我也可以拒绝来自客户端的消息,但会增加客户端的复杂性。 另一种方法是读取行,如果我没记错的话,也应该适用于json。
第三个想法是使用深度跟踪读取json(也许算上“ {”?) 这样,我还可以设置最大消息长度,并使客户端代码更简单。 如何使用erlang进行特别处理,即检查方括号的数量并保持接收直到最后关闭?还是一个好主意? xmpp和其他消息传递协议如何处理此问题?
答案 0 :(得分:2)
另一种方法是读取行,如果我没记错的话,也应该适用于json。
json中的任何键或值都可以包含换行符,并且如果您的读取协议是:“当从套接字读取换行符时停止读取。”,如果其中的任何键或值不读取整个json, json中包含换行符。
第三个想法是使用深度跟踪读取json(也许算“ {”?)
U。太复杂了。 json也可以以[
开头。而且,键或值也可以包含]
或}
。
最重要的是:您需要确定应该标记已发送消息结尾的内容。您可以选择一些相对独特的字符串,例如:--*456?END OF MESSAGE!123**--
,但是json中的键或值再次可能可能包含该字符串,这就是 byte标头的原因被使用。阅读this后,您应该能够对要进行的操作做出明智的选择。