Python 每次事件发生后,连接都会关闭

Python 每次事件发生后,连接都会关闭,python,flask,streaming,server-sent-events,Python,Flask,Streaming,Server Sent Events,我使用以下代码实现javascript EventSource的后端 来自烧瓶导入烧瓶,响应 从时间上导入睡眠 导入时间 类ServerSentEvent(对象): 定义初始化(自身,数据): self.data=数据 self.event=None self.id=None self.desc_映射={ self.data:“数据”, self.event:“事件”, self.id:“id”, self.retry:500 } def编码(自): 如果不是自我数据: 返回“” 行=[%s:%

我使用以下代码实现javascript EventSource的后端

来自烧瓶导入烧瓶,响应
从时间上导入睡眠
导入时间
类ServerSentEvent(对象):
定义初始化(自身,数据):
self.data=数据
self.event=None
self.id=None
self.desc_映射={
self.data:“数据”,
self.event:“事件”,
self.id:“id”,
self.retry:500
}
def编码(自):
如果不是自我数据:
返回“”
行=[%s:%s”%(v,k)
对于k,self.desc_map.items()中的v,如果k]
返回“%s\n\n”%“\n”。加入(行)
def stream():
尽管如此:
ev=ServerSentEvent('hi'+str(int(round(time.time()))))
产量ev
睡眠(0.1)
app=烧瓶(名称)
@应用程序路径(“/events”)
def streamSessionEvents():
返回响应(stream(),mimetype=“text/event stream”)
@附件路线(“/”)
def index():
模板=“”“
var source=new EventSource(“/events”)
source.onmessage=函数(事件){
$(“#日志”).append(event.data+”
) } """ 返回(模板) app.run(threaded=True)
但是,EventSource会每3秒(默认值)重新连接一次,因为每次事件发生后服务器都会关闭连接。如何建立连续连接

from flask import Flask, Response
from time import sleep
import time

class ServerSentEvent(object):

    def __init__(self, data):
        self.data = data
        self.event = None
        self.id = None
        self.desc_map = {
            self.data : "data",
            self.event : "event",
            self.id : "id",
            self.retry: 500
        }

    def encode(self):
        if not self.data:
            return ""
        lines = ["%s: %s" % (v, k) 
                 for k, v in self.desc_map.items() if k]

        return "%s\n\n" % "\n".join(lines)

def stream():
  while True:
    ev = ServerSentEvent('hi ' + str(int(round(time.time()))))
    yield ev
    sleep(0.1)

app = Flask(__name__)

@app.route("/events")
def streamSessionEvents():
  return Response(stream(), mimetype="text/event-stream")


@app.route("/")
def index():
  template = """
     <!doctype html>
    <html>
    <head>
      <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
      <script>
        var source = new EventSource('/events')
        source.onmessage = function (event) {
          $('#log').append(event.data + '</br>')
        }
      </script>
    </head>
    <body>
    <div id="log"></div>
    </body>
    </html>
  """
  return(template)

app.run(threaded=True)