2

我正在尝试将 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框架)。

@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 秒重新连接一次。

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

谢谢你的帮助,奥马尔。

4

2 回答 2

0

确保瓶子没有为您设置 Content-Length 标头。这条线在我看来很可疑。

返回一个迭代器,正如在这个问题中为瓶子所建议的那样,可能会做你想要的。

@route('/events')
def positions():
  yield 'START'
  while stream_alive:
      some_event.wait()
      yield some_data()
  yield 'END'
于 2012-08-23T13:30:32.443 回答
0

AFAIK,SSE 被定义为通过这些重新连接工作。您可能会欺骗他们的内容长度黑客行为......就像在您的标题中建立内容长度 0 一样。

于 2013-09-24T19:05:00.937 回答