【发布时间】:2011-05-23 07:38:33
【问题描述】:
在我对 websockets 的持续好奇中,我注意到了一个趋势:
websocket 世界的“hello world”,至少目前,似乎是“echo”功能。也就是说,演示的应用程序通常是“我发送一些东西,我接收一些东西”。
虽然恰当地证明了该协议的功能,但该示例实际上仅演示了与传统请求/响应周期相同的通信类型。
例如,我能找到的 twisted.web.websockets 的唯一演示(在服务器端)如下:
import sys
from twisted.python import log
from twisted.internet import reactor
from twisted.web.static import File
from twisted.web.websocket import WebSocketHandler, WebSocketSite
class Echohandler(WebSocketHandler):
def frameReceived(self, frame):
log.msg("Received frame '%s'" % frame)
self.transport.write(frame + "\n")
def main():
log.startLogging(sys.stdout)
root = File(".")
site = WebSocketSite(root)
site.addHandler("/ws/echo", Echohandler)
reactor.listenTCP(8080, site)
reactor.run()
if __name__ == "__main__":
main()
我怎样才能在这里检查“推送”功能?即,如何让websocket保持打开状态,然后在某个时间由某个事件的发生决定,通过websocket发送消息,消息的内容也受这个事件的影响?
(对这个问题感兴趣的人,也可以认为我前几天问的这个问题很有说服力:Making moves w/ websockets and python / django ( / twisted? ))
【问题讨论】:
-
鉴于 websockets 在 Firefox 4 hacks.mozilla.org/2010/12/websockets-disabled-in-firefox-4 中被禁用,即使它们完成后,它们可能不希望在所有浏览器中工作,你可能想为你的两个研究一个更高级别的抽象方式浏览器通信。 Websockets 只是优化 Athena divmod.org/trac/wiki/DivmodNevow/Athena 和 Orbited orbited.org 等事物的一种方式。
-
与当前规范(和支持)一样,websockets 实际上不是对 Comet(Athena、Orbited 等)的完整改造。目前,我对适用于所有浏览器的解决方案不感兴趣。我只是想构建一些可以在我自己和集体的其他成员之间工作的东西——我们将完全控制我们的浏览器和防火墙条件。
-
不,不一定。 Athena 是一个完整的高级消息传递系统,它不只是传输字节。而且 Orbited 可以使用多种传输方式,回退到更原始/效率更低的技术,因为它确定更好的传输方式不可用。即使在您的情况下,这也是您想要的东西,因为如果出现比 websockets 更好 的东西,您可能希望利用它而无需重写所有代码。
-
@Glyph:太棒了。这是我在这里提出的问题中的第 6 点:stackoverflow.com/questions/4310706/…(杰出的 50 分赏金!;-))。您能否快速演示一下 Orbited 如何与 Websocket 一起使用,然后在没有适当支持的情况下退回到长轮询?
标签: python twisted comet websocket twisted.web