Вибристые и веб-сайты: за пределами эхо
-
25-09-2019 - |
Вопрос
В моем постоянном любопытстве о WebSockets я заменяю тенденцию:
«Hello World» Websocket Universe, по крайней мере, на данный момент, кажется, «эхо» функциональность. То есть продемонстрированное приложение, как правило, «я что-то отправляю, я что-то получаю».
Недостаточно демонстрируя, что протокол функционален, этот пример фактически демонстрирует только тот же тип связи, что традиционный цикл запроса / ответа позволяет.
Например, единственная демонстрация (на стороне сервера), которую я могу найти из 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()
Как я могу востолько осматривать «толчок» возможности здесь? Т.е. как я могу оставить веб-сокет открыть, а затем позже, в какой-то времени определяется возникновением некоторого события, отправить сообщение через Websocket, содержание которого также влияет на это событие?
(Те, кто интересуется этим вопросом, может также относиться к тому, что он заставляет этот вопрос, который я спросил несколько дней назад: Изготовление движений с WebSockets и Python / Django (/ скручено?))
Решение 2
С использованием хендрикс, Я показал, как настроить веб-приложение в Разговор в Django-Nyc Это использует WebSockets для толкания сообщений с сервера Telnet на веб-страницу.
Другие советы
Это пример обновленного эхообразования, который будет вместо того, чтобы быть просто реактивным, быть активным.
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)
К сожалению, Websockets из https://github.com/rlotun/txwebocket/ , кажется, не имеет метода ConnectionMade (), а вместо этого единственное, что вы можете зацепить, это __в этом__. Обычно вы просто переопределите ConnectionMade (), если это был «нормальный» скрученный протокол. --Fixed в выше по течению