在CGIHTTPServer上使用Python cgi脚本发送的HTML5 Server发送事件

时间:2015-03-25 01:29:54

标签: python html5 server-sent-events

我正在测试HTML5服务器发送的事件,看看我是否可以在我的项目中使用它。我尝试按照http://www.html5rocks.com/en/tutorials/eventsource/basicshttp://www.w3schools.com/html/html5_serversentevents.asp上的教程进行操作,但无法使其发挥作用。

这是我的html(sse.html)和python cgi脚本(sse.py):

<!DOCTYPE HTML>
<html>
<head>
<script type="text/javascript">
   var source = new EventSource("/cgi-bin/sse.py");
   source.onmessage = function(event) {
       console.log(event.data);
   };
</script>
</head>
<body>
Testing SSE!
</div>
</body>
</html>

sse.py如下:

import sys
import datetime
import time

sys.stdout.write('Content-type: text/event-stream\r\n\r\n')

while True:
   now = datetime.datetime.now()
   sys.stdout.write('data: %s\r\n\r\n' % now)
   sys.stdout.flush()
   time.sleep(5)

我将'sse.html'放入'c:\ code \ sse',将'sse.py'放入'c:\ code \ sse \ cgi-bin'。然后,我运行'python -m CGIHTTPServer'来启动开发Web服务器。

当我连接到“http://localhost:8000/sse.html”时,我没有看到控制台记录从服务器收到的数据。相反,我看到一条消息说“资源被解释为脚本但是使用MIME类型text / plain传输:”chrome-extension://hgimnogjllphhhkhlmebbmlgjoejdpjl/bar.js“。”

有谁知道会出现什么问题?

谢谢!

1 个答案:

答案 0 :(得分:2)

我修改了&#39; sse.py&#39;通过试验和错误,代码现在正在运行。新的&#39; sse.py&#39;如下:

import sys
import datetime
import time

sys.stdout.write('Content-type: text/event-stream \r\n\r\n')
now = datetime.datetime.now()
sys.stdout.write('data: %s \r\n' % now)
sys.stdout.write('retry: 1000\r\n\r\n')
sys.stdout.flush()

我仍在努力弄清楚事情是如何运作的。