2017-06-29 86 views
0

今天我一直在尝试创建Javascript和Django之间的异步任务。通过并行线程的websockets发送数据

要创建的WebSockets和管理他们,我用第三方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 ...

传输

这是当我做了我的动作事件日志:

As you see, The last event is always occupied even after 10 seconds have passed

正如你看到的,最后的事件中,我即使经过10秒钟,它总是被占用。

可能是什么问题?在不同线程上使用websockets会导致问题吗?有没有其他解决方案来做到这一点?

好像线程没有工作,因为,每当我从另一台计算机节点发送消息,消息在几秒钟内交付。

在此先感谢。

+1

我以前从未使用过'pusher',但看起来像它使用推通知自己的服务器。由于你的js代码没有改变,我假设在服务器端的问题。你检查了推送器调试控制台吗?我想他们有一些关于收到通知的日志。 –

+0

@SergeyZherevchuk你好,感谢你的回复,我已经更新了我的帖子,现在它包含事件日志,最终事件似乎显示即使在10秒后仍然有东西被占用。 – ShellRox

+1

如果我理解正确,则发送消息后占用的通道。由于这是历史事件,因此您不会在实时通知系统中看到它。你检查了JavaScript控制台日志为什么你的频道腾空了? https://pusher.com/docs/debugging#pusher_logging –

回答

1

这是由主机服务禁止多线程引起的。新线程从未开始,所以事件从未发送给Pusher。

(我引述延长评论聊天@ShellRox。)