Витая и паутина: за гранью эха - PullRequest
12 голосов
/ 10 декабря 2010

В своем постоянном интересе к веб-сокетам я заметил тенденцию:

«Привет, мир» вселенной веб-сокетов, по крайней мере на данный момент, кажется «эхо».То есть, демонстрируемое приложение, как правило, «Я отправляю что-то, я получаю что-то».

Хотя удачно демонстрируется, что протокол функционирует, этот пример фактически демонстрирует только тот же тип связи, что и традиционный запрос / ответцикл задействует.

Например, единственная демонстрация (на стороне сервера), которую я могу найти для 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()

Как я могу вместо этого изучить "толчок "возможность здесь?то есть, как я могу оставить веб-сокет открытым, а затем, через некоторое время, определяемое наступлением какого-либо события, отправить через веб-сокет сообщение, на содержание которого также влияет это событие?

(Те, кто интересуется этим вопросом, могут также расценить этот вопрос, который я задавал несколько дней назад: Делать ходы с websockets и python / django (/ twisted?) )

Ответы [ 2 ]

9 голосов
/ 10 декабря 2010

Это пример обновленного EchoHandler, который вместо того, чтобы реагировать, будет проактивным.

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)

К сожалению, веб-сокеты из https://github.com/rlotun/txWebSocket/, похоже, не имеют метода connectionMade (), и вместо этого единственное, что вы можете подключить, это __init__. обычно вы просто переопределяете connectionMade (), если бы это был «обычный» витой протокол. - Исправлено в восходящем потоке

0 голосов
/ 07 января 2017

Используя hendrix , я показал, как настроить веб-приложение в лекции в Django-NYC , которая использует веб-сокеты для передачи сообщений с сервера telnet на веб-страницу.1005 *

...