2016-01-13 2 views
3

Я хотел бы знать, есть ли способ связаться напрямую между двумя (или более) серверами фляк-сокетов. Я хочу передавать информацию между серверами и подключать клиентов к одному серверу веб-сокетов, который будет иметь всю объединенную логику и данные с других серверов.Связь сервера с сервером

Я нашел этот пример в JS Socket IO Server to Server, где решение должно было использовать socket.io-client для подключения к другому серверу.

Я просмотрел документацию Flask-SocketIO, а также другие ресурсы, однако не кажется, что Flask-SocketIO имеет к нему клиентский компонент.

Любые предложения или идеи?

ответ

5

Flask-SocketIO 2.0 может (возможно) делать то, что вы хотите. Это объясняется в разделе документации Using Multiple Workers.

В основном серверы настроены на подключение к общему ресурсу очереди сообщений (например, redis), а затем перед ним балансировщик нагрузки назначает клиентов любому из серверов в пуле с использованием липких сеансов. Операции широковещания координируются автоматически между серверами путем передачи сообщений в очереди.

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

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

Что касается использования SocketIO-клиента, как и в вопросе, на который вы ссылаетесь, этот shouud также работает. Вы можете использовать этот пакет Python: https://pypi.python.org/pypi/socketIO-client. Если вы пройдете этот маршрут, вы можете иметь сервер быть клиентом и получать события или объединять комнаты.

+0

Спасибо! Это очень полезно. Чтобы уточнить, чего я пытаюсь достичь: Я использую несколько компьютеров Raspberry Pi для интеграции различных датчиков и управляющей электроники. Поэтому, хотя у меня может быть веб-панель на клиентском устройстве, открывающая несколько веб-сокетов для подключения к каждому серверу Raspberry Pi, я хочу, чтобы два сервера Raspberry Pi могли обмениваться данными, а также консолидировать и/или действовать на нескольких входы на заднем конце, прежде чем принимать решение о том, что делать или представлять клиенту. Think temp sensor server отправляет данные на сервер управления печью, чтобы включить нагрев вверх или вниз. – Phil

+0

В принципе у вас есть два варианта. Вы можете сделать то, что я упомянул в последнем абзаце (каждый Pi - это SocketIO-сервер, а также клиент SocketIO для других серверов) или, возможно, более эффективный, поместить redis-сервер в один из узлов и подключить все узлы к нему и обмениваться сообщениями через Pub/Sub. Этот последний подход - это то, что я реализовал для внутреннего использования в версии 2.0 расширения, но, как я упоминал выше, в настоящее время нет поддержки для пользовательского использования очереди, вы должны сделать это, поговорив напрямую с очередью. – Miguel

Смежные вопросы