我研究了 HTML5 EventSource 规范,但不知道如何在接收到的数据结束时解析和处理回车。
应用程序接收由行组成的数据流。每行可以由 \r\n、\n 或 \r 终止。在空白行上,事件应被视为已准备好并已向侦听器触发。
data: foobar\r\n
id: 1\r\n
\r\n
相同内容的同等有效事件
data: foobar\n
id: 1\r\n
\r
完整规范在这里,http ://dev.w3.org/html5/eventsource/ 第 6 章描述了输入的 BNF。
问题是在接收数据结束时看到回车。现在,据我所知,正确的解析方法是进行最长匹配搜索,然后等待下一批数据。问题是,如果 \r 确实是空行标记,则在下一批数据到达并且解析器有足够的数据尝试最长匹配之前,不会触发该事件。
当前数据批次
data: foobar\r\n
id: 1\r\n
\r
下一批数据
\n
data: foobar2\r\n
id: 1\r\n
\r\n
替代案例。下一批数据
data: foobar2\r\n
id: 1\r\n
\r\n
这在传统解析中不会有问题,但它在 EventSource 中,因为我需要尽快触发事件,所以如果实现等待下一个数据批次获得最长匹配,如果发送方使用单个字符可能会等待很长时间\r' 作为空行标记,暂时不会发送任何其他内容。