Python 服务器发送的事件数据未显示在浏览器中

Python 服务器发送的事件数据未显示在浏览器中,python,twisted,server-sent-events,Python,Twisted,Server Sent Events,我不熟悉Python和网络。我正在服务器端尝试一些Python代码,以便在客户端浏览器上显示一些连续的数据。我从net本身获取了这个示例代码。问题是,当我尝试使用localhost在浏览器中访问本地计算机时,该代码在本地计算机上运行良好,但当我尝试从其他计算机访问它时,该代码不起作用。在Ubuntu中,我的浏览器上没有任何数据,但在windows中,当我停止服务器代码时,我会在浏览器上推送所有数据。为此,我在Python中使用Twisted和Flask。以下是我正在尝试的代码: import r

我不熟悉Python和网络。我正在服务器端尝试一些Python代码,以便在客户端浏览器上显示一些连续的数据。我从net本身获取了这个示例代码。问题是,当我尝试使用localhost在浏览器中访问本地计算机时,该代码在本地计算机上运行良好,但当我尝试从其他计算机访问它时,该代码不起作用。在Ubuntu中,我的浏览器上没有任何数据,但在windows中,当我停止服务器代码时,我会在浏览器上推送所有数据。为此,我在Python中使用Twisted和Flask。以下是我正在尝试的代码:

import random
from twisted.web.server import Site
from twisted.web.wsgi import WSGIResource
from twisted.internet import reactor
import time

from flask import Flask, request, Response
app = Flask(__name__)

def event_stream():
    count = 0
    while True:
        count += 1
        yield 'data: %d\n\n' % count
        time.sleep(5)
        print 'data sent...'

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

@app.route('/')
def page():
    return '''
<!DOCTYPE html>
<html>
    <head>
        <script type="text/javascript" src="//code.jquery.com/jquery-1.8.0.min.js"></script>       
        <script type="text/javascript" src="EventSource.js"></script>
        <script type="text/javascript">
            $(document).ready(
                    function() {
                        sse = new EventSource('/my_event_source');
                        sse.onmessage = function(message) {
                            console.log('A message has arrived!');
                            $('#output').append('<li>'+message.data+'</li>');
                        }
                    })
        </script>
    </head>
    <body>
        <h2>Hello World Example to implement Server Sent Event using Twisted in Python...</h2>
        <ul id="output"></ul>
    </body>
</html>
'''
if __name__ == '__main__':
    print 'starting server...'
    resource = WSGIResource(reactor, reactor.getThreadPool(), app)
    site = Site(resource)
    reactor.listenTCP(9999, site)
    reactor.run()
随机导入
从twisted.web.server导入站点
从twisted.web.wsgi导入WSGIResource
从twisted.internet导入
导入时间
从烧瓶进口烧瓶、请求、响应
app=烧瓶(名称)
def event_stream():
计数=0
尽管如此:
计数+=1
“产量”数据:%d\n\n“%计数”
时间。睡眠(5)
打印“已发送数据…”
@app.route(“/my\u event\u source”)
def sse_请求():
返回响应(
事件流(),
mimetype='text/event stream')
@应用程序路径(“/”)
def page():
返回“”'
$(文件)。准备好了吗(
函数(){
sse=新事件源(“/my_事件源”);
sse.onmessage=函数(消息){
log('消息已到达!');
$(“#输出”).append(“
  • ”+message.data+”
  • ); } }) Hello World示例使用Python中的Twisted实现服务器发送事件。。。
      ''' 如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu': 打印“正在启动服务器…” resource=WSGIResource(reactor,reactor.getThreadPool(),app) 站点=站点(资源) 反应堆列表CP(9999,现场) 反应堆运行()

      有人能帮我解释一下,当我试图从其他机器访问数据时,为什么数据没有显示出来(或者如何调试数据)。非常感谢您的帮助。

      这对我来说在本地计算机、局域网和云服务器上都能正常工作。请提供有关您的环境、浏览器以及您看到的具体行为的更多详细信息。如果您想做这样简单的双向web工作,您可能会感兴趣,它为Twisted提供了一个类似烧瓶的包装器,并允许您使用定时事件而不是在
      time.sleep
      中阻塞的线程来执行操作。这将允许您支持更多并发用户,并且不必担心协调对共享资源的访问。这就是说,这里的示例应该可以很好地工作——正如我上面所说的,它对我来说是有效的。@Glyph:我只寻找服务器端的东西(即仅单向的东西)。在本地主机上,我正在尝试使用Windows7。在Windows上,它只适用于Chrome浏览器(删除代理后),但不适用于Firefox。我还试图从我的Windows机器上访问这段代码(部署在Ubuntu 14上),但在任何浏览器上都没有得到任何数据。有什么帮助吗?“删除代理”?什么代理?您尝试过不同的机器作为客户吗?这似乎对我在Windows上的工作也很好。我的office内部网络有一些代理设置,这造成了一些问题。是的,我也尝试从不同的机器访问它@Glyph:您是否在unix/linux上运行此脚本,然后尝试从windows上的浏览器访问它?