【问题标题】:Sending data by websockets from parallel thread通过 websockets 从并行线程发送数据
【发布时间】:2017-12-03 14:25:12
【问题描述】:

今天我一直在尝试在 Javascript 和 Django 之间创建一个异步任务。

为了创建和管理 websocket,我使用了第三方 API 推送器(请确保该问题不是特定于推送器的)。这个系统一开始用在主线程的时候效果很好:

import pusher
import time
from django.shortcuts import render

...
def myView(request):
    ...
    def sendData():
        time.sleep(10)
        pusher_client = pusher.Pusher(
          args='values',
        )
        pusher_client.trigger('my-channel', 'my-event', {'message': 'Test'})
    ...
    return render('My.html', {'keys': 'values'})

这是 Javascript 中的监听器:

var channel = pusher.subscribe('my-channel');
channel.bind('my-event', function(data) {
  alert(data.message);
});

然后我想创建一个并行线程,所以用户不会等待 10 秒来接收并行线程。相反,模板会显示出来,用户会在请求后 10 秒内收到警报。

所以我添加了以下代码,将两个进程分开:

import pusher
import time
from django.shortcuts import render
from threading import Thread

...
def myView(request):
    ...
    def sendData():
        time.sleep(10)
        pusher_client = pusher.Pusher(
          keys='values',
        )
        pusher_client.trigger('my-channel', 'my-event', {'message': 'Test'})

    th = Thread(target=sendData)
    th.daemon = True
    th.start()
    ...
    return render('My.html', {'keys': 'values'})

为函数创建另一个线程后,函数本身会被执行,但是,无法从Javascript传输数据......

这些是我执行操作时的事件日志:

如您所见,即使 10 秒过去了,最后一个事件也总是被占用。

可能是什么问题?问题是在不同线程上使用 websockets 引起的吗?有没有其他解决方案可以做到这一点?

似乎 Thread 无法正常工作,因为每当我从另一个计算机节点发送消息时,消息都会在几秒钟内送达。

提前致谢。

【问题讨论】:

  • 我以前从未使用过pusher,但看起来它使用自己的服务器来推送通知。由于您的 js 代码没有更改,因此我认为问题出在服务器端。你检查过推送器调试控制台吗?我猜他们有某种关于收到通知的日志。
  • @SergeyZherevchuk 你好,谢谢你的回复,我已经更新了我的帖子,现在它包含了事件日志,最终事件似乎显示即使在 10 秒后总是有人占用。
  • 如果我没听错的话,发送消息后信道被占用。由于这是一个历史事件,您不会在实时通知系统中看到它。您是否检查了 javascript 控制台日志,为什么您的频道被腾出? pusher.com/docs/debugging#pusher_logging
  • 只是为了添加更多信息 - 即使通道上没有侦听器,您也应该在调试控制台中看到推送器 api 接收到的事件!您在调试控制台中没有看到API MESSAGE 事件这一事实表明您的事件从未发送到推送器。
  • @ShellRox 感谢您提供的信息。我认为在这种情况下,以上内容仍然对其他人有帮助:)

标签: python django multithreading websocket pusher


【解决方案1】:

这是由于托管服务禁止多线程造成的。新线程从未启动,因此该事件从未发送到 Pusher。

(我在扩展评论聊天中引用了@ShellRox。)

【讨论】:

    猜你喜欢
    • 2020-03-29
    • 2015-11-09
    • 1970-01-01
    • 1970-01-01
    • 2012-11-16
    • 1970-01-01
    • 2014-11-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多