Google App Engine 上的服务器发送推送通知,使用 TaskQueues 进行后台处理长时间运行的任务
这是您在Google App Engine Python 解决方案中需要的源代码,用于在使用Google App Engine任务/后台任务队列已完成任务队列处理步骤中的一个步骤以及任务队列已完全完成时通知用户。可是等等!您只想将通知发送给发起 TaskQueue 请求的特定用户。
第 1 步 - 如何仅向客户端XYZ发布消息?
这很简单,这里是源代码:
此外,为了保护您的应用程序,请确保您通过以下方式获得正确的密钥:https ://admin.pubnub.com仪表板。
JavaScript
<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' }
)
基本上,您使用 User Session ID将通信路由到用户XYZ。现在在 Google App Engine Python 中,您将使用会话 ID向客户端发布您想要的任何消息状态。
Google App Engine - Python 任务
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 个步骤,答案是:“只有一个步骤”。