当在服务器上检测到异步事件时,我需要一个 django 模板来刷新。我在我的开发服务器上使用 django-channels 成功实现了这一点。
但是,我需要部署到 (pythonanywhere.com) 的服务器不支持 ASGI 应用程序,所以我不能在那里使用 django-channels。
我尝试使用https://github.com/fanout/django-eventstream#setup-without-channels中的建议使用 django-eventsteam 构建一个非常简单的服务器发送事件。
我从我的虚拟环境中卸载了频道和频道-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
当调度服务器发送的事件时,此序列不会更改,并且没有证据表明客户端收到了消息。
事件侦听器似乎没有在客户端上注册,并且侦听器内的调试消息没有出现在控制台跟踪中,所以我假设它没有被调用。
关于我做错了什么或如何调试的任何提示将不胜感激。