Связь сервера с сервером через веб-сокет - PullRequest
0 голосов
/ 10 июля 2020

Вот топология архитектуры:

  1. IoT-устройство, которое считает людей и сохраняет данные на своей облачной платформе. Доступ к данным можно получить через API и более c специальных требований, чтобы предоставить конечную точку веб-сервера, где он может sh получать данные каждую минуту или около того. Это готовый продукт, в котором я не могу изменить способ передачи данных.

  2. Веб-сервер на моей стороне, который принимает и хранит данные.

Поскольку я новичок в WebSockets, я интерпретирую приведенную выше конфигурацию как сервер WebSocket, установленный на моем веб-сервере, и жду, пока данные будут получены от IoT-сервера (клиента).

Итак, я развернул Linux server в digitalocean и позволил серверу websocket ждать входящих подключений. Код, который я использовал для сервера:


import asyncio
import websockets

async def echo(websocket, path):
        async for message in websocket:
                print(message)

start_server = websockets.serve(echo, "MYSERVERIP", 80)

asyncio.get_event_loop().run_until_complete(start_server)
asyncio.get_event_loop().run_forever()

Все, что мне нужно на этом этапе, - это распечатать все JSON пакеты, отправленные с сервера IoT.

Когда я пытаюсь установить адрес конечной точки на сервере IoT, он отказывается принимать ws://Myserver:80 и принимает только HTTP://Myserver:80. Очевидно, у меня нет HTTP-сервера, работающего на моем сервере, и поэтому я предполагаю, что подключение отклонено с моего сервера.

Кроме того, IoT API требует аутентификации токена X-Auth-token. Я использую библиотеку WebSockets python, но я не настраивал аутентификацию на своем сервере. Я оставил значение null как для API сервера IoT, так и для моего сервера. Если бы я должен был добавить аутентификацию токена, какие параметры или аргументы потребовались бы для сервера websocket? Я попытался выполнить поиск в документации по веб-сокетам, но безуспешно.

Это не для производственной среды !! Я только пытаюсь учиться.

Любые мысли приветствуются.

1 Ответ

0 голосов
/ 10 июля 2020

Итак, вот требования:

  1. Устройство Интернета вещей, которое считает людей и сохраняет данные на своей облачной платформе. Доступ к данным можно получить через API и многое другое c, которое требуется для предоставления конечной точки веб-сервера, где он может sh передавать данные каждую минуту или около того.
  2. Веб-сервер на моей стороне, который получает и хранит data.

Им нужно, чтобы данные обновлялись sh каждую минуту или около того. По моему скромному мнению, веб-сокеты необходимы только в режиме реального времени.

Тем не менее, мое предлагаемое решение - использовать вместо этого брокера сообщений. Я думаю, что с этим проще работать, чем напрямую с веб-сокетами, и вам не нужно постоянно заботиться о поддержании активного сокет-соединения (что неэффективно с точки зрения энергии в мире Интернета вещей).

Другими словами используйте вместо этого архитектуру Pub / Sub . Ваши устройства IoT публикуют sh данные в Message Broker (обычным является RabbitMQ), а затем вы создаете сервер, который подписывается на брокера, потребляет его данные и сохраняет их.

Теперь каждое устройство подключается к облаку только тогда, когда у него есть данные, это экономит энергию. Протокол может быть MQTT или HTTP, MQTT часто используется в мире Интернета вещей.

Связано: Преимущества обмена сообщениями Pub-sub

...