我正在使用send_message(client_id, message)
ingoogle.appengine.api.channel
来扇出消息。最常见的用例是两个用户。典型的跟踪如下所示:
这两个调用send_message
是独立的。我可以并行执行它们以节省延迟吗?
我正在使用send_message(client_id, message)
ingoogle.appengine.api.channel
来扇出消息。最常见的用例是两个用户。典型的跟踪如下所示:
这两个调用send_message
是独立的。我可以并行执行它们以节省延迟吗?
好吧,没有可用的异步 api,因此您可能需要实现自定义解决方案。
您是否已经尝试过使用本机线程?它在理论上可以工作,但由于 GIL,xmpp api 必须被 I/O 阻塞,我不确定它是否会这样做。
自定义实现总是会带来一些开销,因此对于您的简单案例,它可能不是最好的主意,除非它破坏了 > 2 个用户案例的体验。
然而,还有另一个问题可能值得您花时间:如果实例崩溃并且只需要发送第一条消息会发生什么?该 api 不是事务性的,因此您应该有某种保护措施。考虑到这种情况很少发生,也许一个简单的恢复模式就足够了,但我愿意打赌事务性消息通道听起来更有吸引力,对吧?
有两种方法可以解决这个问题,我想不到:
为你解决了这个问题
我刚刚在googleappengine issue 9157上发布了一个补丁,并补充说:
channel.send_message_async
用于向接收者异步发送消息。channel.send_message_multi_async
用于将单个消息异步广播给多个收件人。在将补丁推送到 SDK 之前,您需要包含该channel_async.py
文件(附加在该线程上)。
用法
import channel_async as channel
# this is synchronous D:
channel.send_message(<client-id>, <message>)
# this is asynchronous :D
channel.send_message_async(<client-id>, <message>)
# this is good for broadcasting a single message to multiple recipients
channel.send_message_multi_async([<client-id>, <client-id>], <message>)
# or
channel.send_message_multi_async(<list-of-client-ids>, <message>)
好处
生产速度对比: