让我们考虑一下biz app中有1000个登录用户。现在,如果用户xyz
之一将请求发送到服务器但服务器需要/需要5-10分钟来完成/返回该请求响应。
注意:由于我的应用在Google App Engine(Python)上运行,这会导致截止日期超出错误。
在这种情况下我在这里调用task / background taskqueue。但客户端并不知道所请求的任务状态是否已完成。
所以要使用类似PubNub
或Pusher
来尝试使用推送功能(第三方)的状态。
现在关注的是,我如何才能向所请求的客户xyz
发布消息?
注意:服务器发布状态消息应该仅向该请求的客户端xyz
发出警报/通知,而不是该通道中存在的所有已登录用户。
作为PubNub
或Pusher
的新手。
所以任何想法/逻辑都要涵盖这种情况。?
技术说明: Google App Engine Python,Javascript。
的更新 的:
我们需要哪个pubnub
(沙盒等等)计划?
答案 0 :(得分:3)
这是 Google App Engine Python解决方案中所需的源代码,用于在使用 Google App Engine 任务/后台时通知用户 taskqueue 已完成TaskQueue处理步骤中的一个步骤,以及TaskQueue完全完成时的步骤。可是等等!您只想将通知发送给发起TaskQueue请求的特定用户。
这很简单,以下是源代码:
另外,为确保您的应用安全,请务必通过以下网址获取正确的密钥:https://admin.pubnub.com信息中心。
<script src=https://pubnub.a.ssl.fastly.net/pubnub-3.4.3.min.js></script>
<script>(function(){
var pubnub = PUBNUB.init({ subscribe_key : 'demo', ssl : true });
pubnub.subscribe({
channel : '0IHM4b2VpamZhaWU0eThyaWpvaWdma3Mg', // SESSION ID
message : function(message) { alert(message) } // ALERT MESSAGE
});
})();</script>
请注意,我们使用简单的JavaScript Alert()函数来显示邮件,但您希望将其转换为页面上更健壮的
<div>{message-here}</div>
通知区域。
taskqueue.add(
url='/my-long-task',
countdown=1,
method='GET',
params={ 'sessionid' : '0IHM4b2VpamZhaWU0eThyaWpvaWdma3Mg' }
)
您基本上使用用户会话ID 将通信路由到用户 XYZ 。现在,在Google App Engine Python中,您将使用会话ID 将您想要的任何消息状态发布到客户端。
import webapp2
from Pubnub import Pubnub ## Download - https://raw.github.com/pubnub/pubnub-api/master/google-app-engine/python/Pubnub.py
pubnub = Pubnub( "demo", "demo" )
def server_to_client_notify( sessionId, message ):
pubnub.publish({
"channel" : sessionId, ## SESSION ID
"message" : "hi!"
})
class LongRunningTaskQueue(webapp2.RequestHandler):
def get(self):
## GET Session ID
sessionId = urllib.unquote(self.request.get( 'sessionid', '' ))
server_to_client_notify( sessionId, "Starting Your Job" )
## - DO A LOT OF WORK - ##
## - DO A LOT OF WORK - ##
## - DO A LOT OF WORK - ##
server_to_client_notify( sessionId, "Your Job is Nearly Complete" )
## - DO A LOT OF WORK - ##
## - DO A LOT OF WORK - ##
## - DO A LOT OF WORK - ##
server_to_client_notify( sessionId, "Your Job has Finished!" )
app = webapp2.WSGIApplication([('/my-long-task', LongRunningTaskQueue)])
基本概念是您发布 SESSION ID 以及TaskQueue URL命令,该命令将任务启动/添加到队列中。然后当TaskQueue启动时,您可以获取URL参数。
如果您想知道是否会有超过1步,答案是:“只有一步。”
答案 1 :(得分:1)
使用邮件定位特定用户的最佳方法是让用户订阅自己的唯一渠道。然后,您可以限制谁可以订阅该频道:
Pusher不允许您让多个用户订阅同一频道,但只向其中一个用户发送消息/事件。据我所知,PubNub也不提供此功能。
这两项服务都没有限制您可以订阅的频道数,因此每个用户拥有一个频道通常是一个很好的解决方案: