通过Socketstream式传输一系列JSONstring

这可能更多的是关于套接字/ TCP的行为,比node.js。

我在node.js中编写了一个服务器,它通过套接字(而不是HTTP)接收一系列的JSON对象。

客户端(iOS应用程序)通过此套接字stream式传输JSONstring。 每个JSONstring的大小都不相同(从几个字节到几个K字节),因此计时。 每个JSONstring都将用一个“写入”操作发送。

当我从套接字接收数据时,我调用JSON.parse()。

简单的testing案例很好,但我不确定这是否足够。

我想知道是否需要担心以下情况:(1)'data'包含多个JSON对象(2)单个JSON对象通过多个数据发送。

你应该为什么是JSON有效载荷开发一个协议,什么不是。 因此,例如通过tcp / ip套接字,您将编写一个开始字符,然后是json有效内容,结束字符。 这样,您在套接字上的读取知道消息何时开始和结束。 现在你想要处理多个JSON有效载荷的特定情况,你将需要一个分隔符(s)。

所以select你的开始,结束和分隔符是由你决定的。 有很多你可以使用的字符。 看看一个ASCII /hex表格的一些select。 但是,坚持不可打印的字符是最好的。 否则,你会遇到负载可能包含这些字符的情况。

如果发生这种情况,您将需要为转义序列开发另一组字符。 这意味着一旦你定义了开始,结束和分隔符,这些字符在有效载荷中是非法的,并且必须由发送端的转义序列replace。 这也意味着接收方必须将这些转义序列转换回正确的字符,以使有效载荷可以返回到初始状态。

所以你可以例如定义你的协议。

[begin] = 0x02 // Hex for Start of text [end] = 0x04 // Hex for end of end of transmission [separator] = 0x03 // Hex for end of text or [begin] = 0x0B // Hex for Vertical Tab [end] = 0x1C // Hex for file separator [separator] = 0x1E // Hex for record separator 

然后你的消息通过TCP / IP套接字(电线)将看起来像(其中…….是消息之间的时间)

 [begin][json payload][separator][end].......[begin][json payload][seperator][json payload][separator][json payload][separator][end]....... 

所以你将不得不编写你的代码来在线上阅读,直到find一个开始。 然后存储有效载荷,直到find分隔符。 那么如果分隔符后面的下一个字符不是结束循环并存储下一个有效载荷。

我也build议在谷歌searchMLLP(最低等级协议)。

这个问题非常完整的解释,解决scheme甚至代码。