1

当在服务器上检测到异步事件时,我需要一个 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

当调度服务器发送的事件时,此序列不会更改,并且没有证据表明客户端收到了消息。

事件侦听器似乎没有在客户端上注册,并且侦听器内的调试消息没有出现在控制台跟踪中,所以我假设它没有被调用。

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

4

0 回答 0