Javascript 为什么我没有得到Comet服务器流事件的实时响应?

Javascript 为什么我没有得到Comet服务器流事件的实时响应?,javascript,ajax,html,comet,Javascript,Ajax,Html,Comet,我有一个流化事件的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 Event

我有一个流化事件的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()
#/usr/bin/python
随机输入
导入系统
导入时间
时间尺度=5
姓名=[
“亚当”,
“鲍勃”,
“卡罗尔”,
“大卫”,
“埃迪”,
“弗兰克”,
“乔治”,
“哈利”,
"艾克",,
“吉姆”,
“肯尼”,
“拉里”,
“玛丽”,
“南希”,
“奥利弗”,
“彼得”,
“昆西”,
“罗杰”,
“山姆”,
“托马斯”,
“叔叔”,
“文森特”,
“威廉”,
“泽维尔”,
“瑜伽士”,
“扎卡里”,
]
通知=[
“申请了ACME的职位。”,
“去参加ACME的面试”,
“接受ACME的报价。”,
]
def delay():
time.sleep((random.random()+random.random())*时间刻度)
def get_random_事件():
结果=“”
结果+=随机选择(名称)
结果+=“”
结果+=随机选择(通知)
结果+=“”
返回结果
打印“内容类型:文本/事件流\n”
虽然(正确):
打印“事件:项目”
打印“数据:”+获取随机事件()
打印“
sys.stderr.flush()
延迟()

从我们的代码开始,我构建了一个在chomium和firefox中成功运行的示例,经过这些修改(使用lighttpd):

  • 在打印结束时添加“\n”
  • 刷新标准输出,而不是标准误差
  • 因此,时间应该是:

    while (True):
        print 'event: item' + '\n'
        print 'data: ' + get_random_event() + '\n'
        print ''
        sys.stdout.flush()
        delay()
    

    从我们的代码开始,我构建了一个在chomium和firefox中成功运行的示例,并进行了以下修改(使用lighttpd):

  • 在打印结束时添加“\n”
  • 刷新标准输出,而不是标准误差
  • 因此,时间应该是:

    while (True):
        print 'event: item' + '\n'
        print 'data: ' + get_random_event() + '\n'
        print ''
        sys.stdout.flush()
        delay()