我正在尝试使用SSE(在chrome中)作为自动收报机应用程序。 似乎在我发现或写入的每个样本中,连接每3-4秒关闭一次。 即使在以下位置运行示例: http://www.w3schools.com/html5/tryit.asp?filename=tryhtml5_sse
您可以看到每3-4秒更新一次。这不是由于服务器 实现(在此示例中为“demo_sse.php”),但由于每3-4秒重新连接一次。
如果我在上面的例子中添加以下内容:
source.onerror=function(event)
{
document.getElementById("result").innerHTML+=source.readyState+ "<br />";
};
您可以清楚地看到readyState为0,表示:“连接尚未建立,或者已关闭且用户代理正在重新连接。” (取自官方的EventSorce API文档)。
我自己也为服务器端写了一个脚本, 这是代码(使用python bottle web framework)。
@route('/events')
def positions():
response.content_type = 'text/event-stream'
response.set_header('Cache-Control', 'no-cache')
now = datetime.datetime.now().time().replace(microsecond=0)
return "data: %s\n\n"%now
我得到同样的东西。每3-4秒重新连接一次。
所以我感兴趣的是如何通过会话保持连接。
感谢您的帮助, 奥马尔。
答案 0 :(得分:0)
确保瓶子没有为您设置Content-Length标头。 This line对我来说很可疑。
按照this issue for bottle的建议,返回迭代器可能会做你想要的。
@route('/events')
def positions():
yield 'START'
while stream_alive:
some_event.wait()
yield some_data()
yield 'END'
答案 1 :(得分:0)
AFAIK,SSE被定义为完成这些重新连接。 你可以欺骗他们内容长度的hackery ... 就像在标题中建立内容长度0一样。