Django服务器发送的事件未触发HTML5侦听器

时间:2018-08-13 01:50:45

标签: javascript html5 server-sent-events django-channels event-stream

当服务器上检测到异步事件时,我需要一个django模板来刷新。我在开发服务器上使用django-channels成功实现了这一点。

但是,我需要部署到的服务器(pythonanywhere.com)不支持ASGI应用程序,因此我不能在那里使用django-channels。

我尝试使用https://github.com/fanout/django-eventstream#setup-without-channels中的建议,使用django-eventsteam构建一个非常简单的服务器发送事件。

我从虚拟环境中卸载了channels和channels-redis,然后安装了django-eventstream(此重新安装的信道)

我曾尝试使用图钉和扇出作为消息代理,但是仍然遇到相同的问题。

服务器发送的消息似乎已正确发送:

send_event('test', 'message', {'text': 'hello world'})

但客户端似乎未检测到。

var es = new ReconnectingEventSource('evdja/?channel=test');

es.addEventListener('message', function (e) {
    console.log(e.data);
                location.reload(true);
}, false);

我只希望在检测到服务器发送事件时刷新页面,但不会触发侦听器,控制台上不会显示任何消息,也不会刷新。

否则,连接似乎正常,并且在服务器端控制台上每3秒重复一次此消息:

[13/Aug/2018 11:35:25] "GET /kbfb/event/evdja/?channel=test HTTP/1.1" 200 2077

在chrome浏览器中,我向reconnecting-eventsource.js添加了一些跟踪消息,并在客户端控制台上重复了以下消息序列:

ReconnectingEventSource.prototype._onopen

ReconnectingEventSource.prototype.onopen:open

ReconnectingEventSource.prototype._onerror

ReconnectingEventSource.prototype.onerror:error

在调度服务器发送的事件时,不会更改此顺序,也没有证据表明客户端接收到该消息。

事件侦听器似乎未在客户端上注册,并且侦听器内部的调试消息也未出现在控制台跟踪中,因此我假定未调用它。

任何关于我做错了什么或如何调试的提示都将不胜感激。

0 个答案:

没有答案