Vraag Twisted en Websockets: Beyond Echo


In mijn voortdurende nieuwsgierigheid naar websockets merk ik een trend op:

De "Hello World" van het websocket-universum lijkt op zijn minst op het moment "echo" -functionaliteit te zijn. Dat wil zeggen, de aangetoonde toepassing is meestal: "Ik stuur iets, ik ontvang iets."

Hoewel dit treffend aantoont dat het protocol functioneel is, toont dit voorbeeld slechts feitelijk hetzelfde type communicatie als de traditionele verzoek / responscyclus mogelijk maakt.

De enige demonstratie (aan de serverzijde) die ik kan vinden van twisted.web.websockets is bijvoorbeeld het volgende:

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()

Hoe kan ik in plaats daarvan de "push" -functie hier onderzoeken? dat wil zeggen, hoe kan ik de web socket open laten en later, op een bepaald moment bepaald door het optreden van een evenement, een bericht sturen via de websocket, waarvan de inhoud ook wordt beïnvloed door deze gebeurtenis?

(Degenen die geïnteresseerd zijn in deze vraag kunnen deze vraag ook beschouwen als een dwingende vraag die ik een paar dagen geleden stelde: Verplaatsingen maken met websockets en python / django (/ gedraaid?))


12
2017-12-10 06:21


oorsprong


antwoorden:


Dit is een voorbeeld van een bijgewerkte EchoHandler die in plaats van alleen maar reactief is, proactief is.

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)

Helaas websockets van https://github.com/rlotun/txWebSocket/ lijkt niet de methode connectionMade () te hebben, en in plaats daarvan is het enige waar u op kunt inhaken de __in het__. meestal zou u connectionMade () overschrijven als het een 'normaal' gedraaid protocol zou zijn.  - Gefixeerd in upstream


9
2017-12-10 06:32



Gebruik makend van hendrix, Ik liet zien hoe je een web-app instelt een gesprek op Django-NYC die websockets gebruikt om berichten van een telnet-server naar een webpagina te duwen.


0
2018-01-06 22:39