Pregunta

En mi constante curiosidad acerca de websockets, estoy notando una tendencia:

El "hola mundo" de la websocket el universo, al menos por el momento, parece ser el "eco" de la funcionalidad.Es decir, la demostrada aplicación es generalmente "puedo enviar algo, puedo recibir algo".

Mientras que, acertadamente, lo que demuestra que el protocolo es funcional, en este ejemplo sólo muestra el mismo tipo de comunicación que el tradicional ciclo de solicitud-respuesta permite.

Por ejemplo, la única demostración (en el lado del servidor), que puede encontrar de twisted.web.websockets es la siguiente:

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

¿Cómo puedo en lugar de examinar "empujar" la capacidad de aquí?es decir, ¿cómo puedo dejar la web socket abierto, y luego, más tarde, en algún momento determinado por la ocurrencia de algún evento, envíe un mensaje a través de la websocket, el contenido de que también está influenciado por este evento?

(Los interesados por esta cuestión también podría considerar como convincente a esta pregunta que hice hace unos días: Lo que se desplaza w/ websockets y python / django ( / torcido?))

¿Fue útil?

Solución 2

El uso de hendrix, Me mostró cómo configurar una aplicación web en una charla en Django-NYC que utiliza websockets para mensajes de inserción de un servidor de telnet a una página web.

Otros consejos

Este es un ejemplo de una actualización de EchoHandler que en lugar de ser reactivo, ser proactivo.

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)

Por desgracia, websockets de https://github.com/rlotun/txWebSocket/ no parece tener la connectionMade() método, y en lugar de la única cosa que usted puede enganchar en el __init__. por lo general, usted acaba de anular connectionMade() si se tratara de un 'normal' twisted protocolo. --Fija en upstream

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top