У меня есть скрипт python (в платформе CherryPy), который отправляет текст Event: и data: в виде сообщение в блоге Opera описывает для клиентского браузера. JavaScript, который получает содержимое x-dom-event-stream, почти идентичен тому, что они показывают в сообщении блога. Однако браузер отображает только первое отправленное событие. Кто-нибудь знает, что мне не хватает?
Я попробовал несколько старых версий Opera и обнаружил, что они работают в Opera 9.52, но не в более новых версиях. Что они изменили?
Вот код питона:
class dumpData(object):
def index(self):
cherrypy.response.headers['Content-Type'] = "application/x-dom-event-stream"
def yieldData():
i = 0
while 1:
yield "Event: count\n"
yield "data: "
yield i
yield "\n\n"
i = i + 1
time.sleep(3);
return yieldData()
index._cp_config = {'response.stream': True}
index.exposed = True
А вот javascript/html. Выполнение запроса к /data/ запускает описанную выше функцию Python.
<head>
<script>
onload = function() {
document.getElementById("count").addEventListener("cout", cout, false);
}
function count(e) {
document.getElementById("stream").firstChild.nodeValue = e.data;
}
</script>
<event-source id="count" src="/data/">
</head>
<body>
<div id="stream"></div>
</body>
Открытие прямого URL-адреса /data/ в Firefox сохраняет поток в файл. Поэтому я знаю, что вывод в правильном формате и что поток вообще работает.