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