ツイストとウェブケット:エコーを超えて
-
25-09-2019 - |
質問
WebSocketsについての私の進行中の好奇心では、私はトレンドに気づいています:
少なくとも現時点では、Websocket Universeの「Hello World」は「エコー」機能のようです。つまり、実証されたアプリケーションは通常、「私は何かを送り、何かを受け取ります」です。
プロトコルが機能的であることを適切に実証していますが、この例は実際に、従来の要求 /応答サイクルが有効にするのと同じタイプの通信のみを示しています。
たとえば、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ソケットを開いたままにしてから、ある時点でいくつかのイベントの発生によって決定された場合、WebSocketからメッセージを送信する方法は、このイベントの影響を受けますか?
(この質問に興味がある人は、数日前に私が尋ねたこの質問とみなすかもしれません。 WebSocketsとPython / Django( / Twisted?)で動きをする)
解決 2
使用 ヘンドリックス, 、でWebアプリをセットアップする方法を示しました Django-Nycでの講演 これにより、WebSocketsを使用して、TelnetサーバーからWebページにメッセージをプッシュします。
他のヒント
これは、アップデートされたエコーハンドラーの例であり、単にリアクティブではなく、積極的であることになります。
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)
残念ながら、WebSockets https://github.com/rlotun/txwebsocket/ ConnectionMade()メソッドがないようで、代わりにあなたが接続できる唯一のものは __初期化__。 通常、「通常の」ツイストプロトコルである場合、ConnectionMade()をオーバーライドします。 - 上流で固定