Domanda

Nella mia continua curiosità per i websocket, sto notando una tendenza:

Il "Hello World" dell'universo WebSocket, almeno al momento, sembra essere la funzionalità "eco". Cioè, l'applicazione dimostrata è in genere, "Invio qualcosa, ricevo qualcosa".

Mentre dimostra giustamente che il protocollo è funzionale, questo esempio dimostra effettivamente lo stesso tipo di comunicazione che il ciclo di richiesta / risposta tradizionale abilita.

Ad esempio, l'unica dimostrazione (sul lato server) che posso trovare di Twisted.web.websockets è la seguente:

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

Come posso invece esaminare la capacità di "push" qui? vale a dire, come posso lasciare aperta la presa web e, poi, in qualche momento determinato dal verificarsi di qualche evento, inviare un messaggio tramite WebSocket, il cui contenuto è influenzato anche da questo evento?

(Coloro che sono interessati da questa domanda potrebbero anche considerare avvincente questa domanda che ho posto qualche giorno fa: Fare mosse con websocket e python / django ( / attorcigliato?))

È stato utile?

Soluzione 2

Usando Hendrix, Ho mostrato come impostare un'app web in Un discorso a Django-nyc Ciò utilizza WebSocket per spingere i messaggi da un server Telnet a una pagina Web.

Altri suggerimenti

Questo è un esempio di un echohandler aggiornato che invece di essere reattivo, sarà proattivo.

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)

Sfortunatamente, websockets da https://github.com/rlotun/txwebsocket/ non sembra avere il metodo ConnectionMade (), e invece l'unica cosa in cui puoi collegare è il __dentro__. Di solito si limita a sovrascrivere ConnectionMade () se si trattasse di un protocollo intrecciato "normale". --Fissata in upstream

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top