我研究過HTML5 EventSource規範,但無法弄清楚如何解析和處理收到數據末尾的回車。解析來自網絡的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'作爲空行標記,並且它不會在一段時間內發送任何其他內容。