2
我有一個CGI腳本,流事件:爲什麼我沒有得到Comet服務器流事件的實時響應?
#!/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()