为什么我没有得到对Comet服务器流事件的实时响应
Why am I not getting a live response to Comet server stream events?
我有一个流式传输事件的CGI脚本:
#!/usr/bin/python
...
print 'Content-Type: text/event-stream'n'
while (True):
delay()
print 'event: item'
print 'data: ' + get_random_event()
print ''
从命令行,它以随机间隔(每隔几秒钟)发送随机事件。
然而,我有以下JavaScript:
var source = new EventSource('feed.cgi');
source.addEventListener('message', function(current_event)
{
alert(current_event.data);
}, false);
这从来没有提醒过我。Chrome JavaScript控制台中没有错误,但到目前为止,我从未明显意识到监听服务器脚本的代码收到了事件。
你对我怎么买这些有什么建议吗?
--编辑--
我可能应该给出第一个CGI脚本来完成。FireFox表示:"FireFox无法在http://[deleted]/feed.cgi上建立与服务器的连接。"但我通常可以在兄弟目录中执行cgi脚本,而Apache的细粒度目录设置仍然位于两者的父目录上,旨在允许具有.cgi扩展名的脚本作为cgi运行。并且脚本被设置为模式0755。
在行为增加后添加文件刷新似乎不会改变脚本的接收。
#!/usr/bin/python
import random
import sys
import time
timescale = 5
names = [
'Adam',
'Bob',
'Carol',
'David',
'Eddie',
'Frank',
'George',
'Harry',
'Ike',
'Jim',
'Kenny',
'Larry',
'Mary',
'Nancy',
'Oliver',
'Peter',
'Quincy',
'Roger',
'Sam',
'Thomas',
'Uncle',
'Vincent',
'William',
'Xavier',
'Yogi',
'Zachary',
]
notifications = [
'applied for a position at ACME.',
'went to an interview at ACME.',
'accepted an offer from ACME.',
]
def delay():
time.sleep((random.random() + random.random()) * timescale)
def get_random_event():
result = '<div class="activity"><span class="name">'
result += random.choice(names)
result += '</span> '
result += random.choice(notifications)
result += '</div>'
return result
print 'Content-Type: text/event-stream'n'
while (True):
print 'event: item'
print 'data: ' + get_random_event()
print ''
sys.stderr.flush()
delay()
从我们的代码和W3chools服务器发送事件文档开始,我构建了一个在chomium和firefox中成功运行的示例,并进行了以下修改(使用lighttpd):
- 在打印结束时添加"''n"
- 清除标准输出而不是标准错误
所以时间应该是:
while (True):
print 'event: item' + ''n'
print 'data: ' + get_random_event() + ''n'
print ''
sys.stdout.flush()
delay()
相关文章:
- 提示使用服务器端事件处理程序激活JavaScript
- 未命中服务器发送的事件侦听器
- 服务器上的Meteor客户端断开连接事件
- 服务器端事件+客户端事件与Websocket
- 服务器发送的事件直到脚本完成才更新
- 事件循环的MEAN.JS setInterval进程(从另一个服务器获取数据)
- 为什么我没有得到对Comet服务器流事件的实时响应
- ServiceStack JavaScript服务器事件客户端的身份验证
- 服务器用Ruby Grape发送事件
- 销毁窗口.重新调整事件订阅服务器的大小
- 通过将文件上载到ASHX处理程序来实现SSE(服务器发送的事件)
- 从javascript强制服务器TextChanged事件
- 用于显示服务器端验证结果的 Jqgrid 编辑事件
- asp.net javascript .click() 事件未在服务器上触发
- 服务器触发客户端事件两次
- 套接字发生了什么's在'断开连接'事件(服务器端)
- jQueryUI FullCalendar:从服务器获取事件后的回调
- 从服务器获取数据,并使用$http服务和ng-change在select事件上显示它
- 如何在 Elm 中捕获服务器事件
- 在 HTML 按钮单击上的 JavaScript 函数之后调用服务器事件