#python #node.js #sockets #ssl #tls1.2
Вопрос:
Контекст
У меня есть https-сервер, работающий на node.js это обслуживает запросы различных клиентских приложений, написанных на python, и я хочу включить одноранговую связь между клиентами. Для достижения этой цели я отслеживаю «онлайн» клиентов на сервере, который затем отправляет необходимые данные, чтобы одноранговые узлы могли обмениваться данными между собой.
Моя цель:
- Клиентские приложения открывают три сокета (один для приема сообщений от других клиентов, один для отправки сообщений другим клиентам и один для приема сообщений с сервера — назовем этот
notification socket
).
host = '127.0.0.1'
listener_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
ssl_listener_socket = ssl.wrap_socket(listener_socket, keyfile= pkey_path,
certfile= crt_path, cert_reqs= ssl.CERT_NONE, ssl_version=ssl.PROTOCOL_TLSv1_2)
ssl_listener_socket.bind((host, 0))
listener_name = ssl_listener_socket.getsockname()
sender_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
ssl_sender_socket = ssl.wrap_socket(sender_socket, keyfile= pkey_path,
certfile= crt_path, cert_reqs= ssl.CERT_NONE, ssl_version=ssl.PROTOCOL_TLSv1_2)
ssl_sender_socket.bind((host, 0))
sender_name = ssl_sender_socket.getsockname()
notification_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
ssl_notification_socket = ssl.wrap_socket(notification_socket, keyfile= pkey_path,
certfile= crt_path, cert_reqs= ssl.CERT_NONE, ssl_version=ssl.PROTOCOL_TLSv1_2)
ssl_notification_socket.bind((host, 0))
notification_name = ssl_notification_socket.getsockname()
- Клиент отправляет IP-адреса и порты различных сокетов на сервер
- Когда сервер получает запрос на подключение от клиента, который хочет поговорить с другим клиентом (клиенты идентифицируются по именам пользователей), если оба они находятся «в сети», сервер открывает два ssl-сокета (по одному для каждого клиента), подключается к каждому клиенту
notification socket
и отправляет ему информацию о сокетах другого клиента.
Проблема
Я не в состоянии выполнить задание № 3. Как я могу создать два ssl-сокета в nodejs и отправлять данные в сокеты python?
Ответ №1:
На дизайнерской ноте я бы сделал это по-другому.
- Настройка сервера сокетов для клиента
- Каждый клиент открывает сокет-соединение с основным сервером. Для этого используйте websockets или python-socketio. Я полагаю, это то, что вы хотите сделать?
- Клиенты отправляют свою информацию на сервер через сокет, а сервер отправляет информацию другим клиентам.
- Каждый клиент получает информацию о хостах других клиентов. Теперь вы можете выбрать создание соединений сокетов с другими серверами. N для n хостов.