我正在开发一个简单的网络应用程序,该应用程序使用 angular 和cherrypy(目前正在制作原型)完成。我正在上传两个文件,然后在cherrypy中调用一个外部python程序来处理它们,使用子进程(popen)。到目前为止,我能够做到这一点。我想要实现的是传递给客户端的外部程序(我通过 popen 捕获)的输出。我的问题是,我试图在cherrypy上设置服务器发送的事件并且没有成功。
这是我要公开的cherrypy方法(来自网络的示例):
@cherrypy.expose
def getUpdate(self):
#Set the expected headers...
cherrypy.response.headers["Content-Type"] = "text/event-stream;charset=utf-8"
def content():
yield "Hello,"
yield "world"
return content()
这是javascript客户端代码(我启用了CORS并且可以正常工作):
var sseEvent = new EventSource('http://localhost:8090/getUpdate');
sseEvent.onmessage = function (event) {
console.log(event);
};
sseEvent.onopen = function (event) {
//console.log("I have started...");
};
我看过这个问题和这个博客。然而,在从服务器端调用函数时,EventSource 对象上的 onmessage 事件并未触发。我的理解是,您可以从服务器端调用该函数,它会从浏览器中捕获事件。我错了还是设置错了?