服务器发送事件(SSE)在IIS下似乎不能实时工作(我使用的是Python和Flask)

服务器发送事件(SSE)在IIS下似乎不能实时工作(我使用的是Python和Flask),python,iis,flask,server-sent-events,Python,Iis,Flask,Server Sent Events,我已经使用Flask框架开发并成功测试了一个简单的SSE Python应用程序。当使用Flask服务器时,每个SSE消息都会实时显示。当我尝试在IIS下运行完全相同的程序时,输出被阻止,并且只以长轮询方式显示;仅当SSE连接终止时。甚至在使用Localhost时也会发生这种情况,所以我认为这不是由代理或防火墙引起的 这是Python代码: ''' Test SSE with Python and Flask ''' import flask, flask.views import time a

我已经使用Flask框架开发并成功测试了一个简单的SSE Python应用程序。当使用Flask服务器时,每个SSE消息都会实时显示。当我尝试在IIS下运行完全相同的程序时,输出被阻止,并且只以长轮询方式显示;仅当SSE连接终止时。甚至在使用Localhost时也会发生这种情况,所以我认为这不是由代理或防火墙引起的

这是Python代码:

'''
Test SSE with Python and Flask
'''
import flask, flask.views
import time

app = flask.Flask(__name__) 
app.secret_key = "anything"

def event_stream():
    mylist = (x for x in range(10))
    for i in mylist:
        if i < 10:   
            message = "Message # %s" % i
            yield 'data: %s\n\n' % message
            time.sleep(1)
    yield 'data: // END\n\n'
    return

@app.route('/stream')
def stream():
    Msg = event_stream()
    return flask.Response(Msg,
                          mimetype="text/event-stream")

class View(flask.views.MethodView):
    def get(self):
        return flask.render_template('ssetest.html')

    def post(self):
        return self.get()

app.add_url_rule('/', view_func=View.as_view('main'), methods = ["GET", "POST"])

if __name__ == '__main__':
    app.run()
“”
使用Python和Flask测试SSE
'''
导入flask,flask.views
导入时间
app=烧瓶。烧瓶(\uuuuu名称\uuuuuuu)
app.secret\u key=“任何东西”
def event_stream():
mylist=(范围(10)内的x代表x)
对于mylist中的i:
如果i<10:
message=“message#%s”%i
“产生”数据:%s\n\n“%s”消息
时间。睡眠(1)
产生“data://END\n\n”
返回
@app.route(“/stream”)
def stream():
Msg=事件流()
返回烧瓶。响应(味精,
mimetype=“文本/事件流”)
类视图(flask.views.MethodView):
def get(自我):
返回flask.render_模板('ssetest.html')
def post(自我):
返回self.get()
app.add_url_rule('/',view_func=view.as_view('main'),methods=[“GET”,“POST”])
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
app.run()
以下是Jinja Template ssetest.html:

<!doctype html>
<html>
<head>
<title> Test SSE </title>
</head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js">
</script>
<style>body { max-width: 1000px; margin: 100; padding: 1em; background: black; color: #fff; font: 16px/1.6 menlo, monospace; }</style>
<body>
<form action = "/" method = "post">
<input type = "submit" value = "Execute Again" />
</form>
<pre id="out"></pre>
<script>
var out = document.getElementById('out');
var color = 'yellow'
function sse() {
        var url = '/stream';
        document.write('STARTING');
        var source = new EventSource(url);
        source.onmessage = function(e) {
    var line = '<p style="line-height: 0.1;color:'+color+'">'+e.data+'</p>';
        out.innerHTML =  line + out.innerHTML;
    var start_msg = e.data.substring(0,2);
    if (start_msg == '//')
        {
                source.close();
                }
            };
                }
     sse();
 </script>

</body>
</html>  

测试SSE
正文{最大宽度:1000px;边距:100;填充:1em;背景:黑色;颜色:#fff;字体:16px/1.6 menlo,单空格;}
var out=document.getElementById('out');
变量颜色='黄色'
函数sse(){
var url='/stream';
文件。写入(“开始”);
var source=新事件源(url);
source.onmessage=函数(e){
var line='

'+e.data+'

'; out.innerHTML=line+out.innerHTML; var start_msg=e.data.substring(0,2); 如果(start_msg=='/') { source.close(); } }; } sse();
事实上HttpPlatformHandler有,所以我的消息不会立即发送出去

我必须改变, 所以
web.config
必须更新到这个位置

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
      <system.webServer>
        <handlers>
          <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
        </handlers>
        <aspNetCore processPath=".\your_program_startup"  />
      </system.webServer>
    </configuration>

要在
iis
上以
aspNetCore
的身份启动
python
的应用程序,应用程序需要获取环境变量名
aspNetCore\u PORT
,然后在该端口上启动http服务


就这些

您的应用程序如何连接到IIS?