SSE(服务器发送事件)断开连接

时间:2012-07-16 11:06:45

标签: javascript http bottle server-sent-events

我正在尝试使用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秒重新连接一次。

所以我感兴趣的是如何通过会话保持连接。

感谢您的帮助, 奥马尔。

2 个答案:

答案 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一样。