通过解析 json 在 gen_tcp:recv 上接收的字节数

Bytes to receive on gen_tcp:recv by parsing json

在聊天服务器上工作,我需要在 erlang 中通过 gen_tcp 接收 json。

一种方法是发送一个 4 字节的 int header,这是一个好主意,这样我也可以拒绝来自客户端的超过最大长度的消息,但会增加客户端的复杂性。 另一种方法是读取行,如果我没记错的话,也应该适用于 json。

第三个想法是使用深度跟踪阅读 json(可能算上“{”?) 这样我还可以设置最大消息长度并使客户端代码不那么复杂。 我怎样才能用 erlang 特别地做到这一点,即检查打开的方括号的数量并继续接收直到最后关闭?或者它是否是个好主意? xmpp 和其他消息协议如何处理这个问题?

Another way is to read line, should work too for json if i am not wrong.

json 中的任何键或值都可以包含换行符,如果您的读取协议是:"Stop reading when a newline character is read from the socket.",您将不会读取整个 json 如果任何键或值在json 中有一个换行符。

Third idea is to read json using depth tracking (counting '{' maybe?)

呃。太复杂了。 json 也可以以 [ 开头。而且,键或值也可以包含 ]}

底线是:您需要决定用什么来标记已发送邮件的结尾。您可以选择一些相对独特的字符串,例如:--*456?END OF MESSAGE!123**--,但是 json 中的键或值可能 可能 包含该字符串——这就是为什么byte headers 被使用。阅读 this.

后,您应该能够就如何继续进行做出明智的选择