Pergunta

Na minha constante curiosidade sobre o websockets, estou percebendo uma tendência:

O "hello world" do websocket universo, pelo menos no momento, parece ser "eco" de funcionalidade.Isto é, a demonstração da aplicação normalmente é, "eu enviar algo, eu receber alguma coisa."

Enquanto apropriadamente, demonstrando que o protocolo é funcional, este exemplo só, na verdade, demonstra o mesmo tipo de comunicação que o tradicional ciclo de solicitação / resposta permite.

Por exemplo, a única demonstração (no lado do servidor) que eu possa encontrar torcidos.da web.websockets é o seguinte:

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

Como eu posso em vez de examinar "empurrar" a capacidade aqui?ou seja, como eu posso deixar a web socket abrir e, em seguida, mais tarde, em algum momento determinado pela ocorrência de algum evento, envie uma mensagem através do websocket, o conteúdo também é influenciado por este evento?

(Os interessados por esta questão pode também considerar como convincente a esta pergunta que fiz alguns dias atrás: Fazendo movimentos w/ websockets e python / django ( / torcida?))

Foi útil?

Solução 2

Usando hendrix, Eu mostrei como configurar uma web app uma palestra do Django-NYC que usa o websockets para emissão de mensagens de um servidor de telnet para uma página da web.

Outras dicas

Este é um exemplo de um atualizados EchoHandler que em vez de ser apenas reativo, ser pró-ativo.

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)

Infelizmente, websockets de https://github.com/rlotun/txWebSocket/ não parece ter o connectionMade() método, e, em vez disso, a única coisa que você pode ligar para é o __init__. normalmente você só substituir connectionMade() como se fosse um "normal" twisted protocolo. --Fixo no montante

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top