Websocket, как вам на самом деле поток данных без необходимости "пинговать" сервер? - PullRequest
0 голосов
/ 31 марта 2019

У меня есть простой вариант использования. Считайте некоторые данные с датчика и передайте их клиентам.

Поэтому я выбираю webSocket, но моя проблема в том, что мне нужно использовать какой-то таймер или триггер"чтобы сервер отправил данные.Прямо сейчас у меня есть файл .py, который подключается к веб-сокету и отправляет сообщения «ping», я могу переместить этот таймер в javascript и заставить клиентов отправлять сообщения «ping», которые будут лучше, но все еще с использованием таймера.

Мне нужен сервер для непрерывной потоковой передачи данных всем, кто подключен.

Сервер должен выглядеть примерно так:

  • Клиент- ПриветWS-сервер, к которому я хочу подключиться.

  • Sv - Круто, что вы находитесь.

  • Клиент - Спасибо за принятие ....

  • Сервер - Здесь есть некоторый бесконечный поток данных

Я думал, что это может сработать, так это то, что каждый клиент отправляет свой собственный «идентификатор» такчто сервер получает сообщение с идентификатором клиента, который хочет получить самые последние данные, и предоставляет ему самые последние данные, а на стороне клиента, каждый раз, когда он получает обновление, он снова отправляет другое сообщение для обновления и повторяется, пока один из них не сдается,вместо отправки данных всем клиентам вцикл.

Таймер ушел, но я думаю, что должно быть что-то лучше, потому что, глядя на консоль разработчика на некоторых веб-сайтах, которые используют веб-сокеты, я не вижу ничего, что отправлял с клиента только сервер.

Разве серверу не нужно событие для запуска сообщения или есть способ заставить сервер передавать данные?

Похоже, что веб-сокеты управляются событиями, но тогда как видео отправляются в реальном времени?через websockets? Обновляет ли клиент запрос?

Это сервер ws, который у меня есть в python, и вы можете увидеть "ping" в on_message ()

Мне не нужен реальный код илиреализации, просто, как люди это делают?

PORT = 9000
clients = []

class MainHandler(tornado.web.RequestHandler):
  def get(self):
    print("[HTTP](MainHandler) User Connected.")
    self.render("index.html")


class WSHandler(tornado.websocket.WebSocketHandler):
    def open(self):
        clients.append(self)
        print('[WS] Connection was opened.%s' % (self))

    def on_message(self, message):
        print('[WS] Incoming message: %s' % (message))
        if message == "ping":
            date = datetime.now().strftime('%H:%M:%S')
            values = [0]*8
            for i in range(8):
                values[i] = random.uniform(1.5,1.9)
                #decomentati
                #values[i] = mcp.read_adc(i)* 3.3 /1023
            #conversia se face in javscript trebuie inmulti cu referinta si impartit la 1023
            message = {
                'date': date,
                'voltage': values
            }
            for client in clients:
                client.write_message(json_encode(message))
    def on_close(self):
        clients.remove(self)
        print('[WS] Connection was closed.')


application = tornado.web.Application([
  (r'/', MainHandler),
  (r'/ping', WSHandler),
  (r'/ws', WSHandler),
  ], **settings)


if __name__ == "__main__":
    try:
        http_server = tornado.httpserver.HTTPServer(application)
        http_server.listen(PORT)
        main_loop = tornado.ioloop.IOLoop.instance()

        print("Tornado Server started")
        main_loop.start()

    except:
        print("Exception triggered - Tornado Server stopped.")
       # GPIO.cleanup()

#End of Program
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...