扭曲和网络:超越技术

2024-04-25 03:38:34 发布

您现在位置:Python中文网/ 问答频道 /正文

在我对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()

我该如何检查“推送”功能呢?也就是说,我怎样才能让web套接字保持打开状态,然后在某个时间,根据某个事件的发生情况,通过web socket发送一条消息,该消息的内容也会受到该事件的影响?

(对这个问题感兴趣的人可能也会认为我几天前问的这个问题很有说服力:Making moves w/ websockets and python / django ( / twisted? )


Tags: fromimportecho功能logwebwebsocketsmain
2条回答

这是一个更新的EchoHandler的例子,它将不再只是被动的,而是主动的。

class ChattyHandler(WebSocketHandler):
    def connectionMade(self):
        self.transport.write('oh hai\n')
        self.saysomething()

    def saysomething(self):
        self.transport.write('still there?\n')
        reactor.callLater(5, self.saysomething)

不幸的是,来自https://github.com/rlotun/txWebSocket/的websockets似乎没有connectionMade()方法,相反,您唯一可以连接到的是\u init。如果是“普通”扭曲协议,通常只需重写connectionMade()。--固定在上游

使用hendrix,我展示了如何在a talk at Django-NYC中设置一个web应用,该应用使用websockets将消息从telnet服务器推送到web页面。

相关问题 更多 >