Как отправить данные в SSL-сокет Python через Node.js

#python #node.js #sockets #ssl #tls1.2

Вопрос:

Контекст

У меня есть https-сервер, работающий на node.js это обслуживает запросы различных клиентских приложений, написанных на python, и я хочу включить одноранговую связь между клиентами. Для достижения этой цели я отслеживаю «онлайн» клиентов на сервере, который затем отправляет необходимые данные, чтобы одноранговые узлы могли обмениваться данными между собой.

Моя цель:

  1. Клиентские приложения открывают три сокета (один для приема сообщений от других клиентов, один для отправки сообщений другим клиентам и один для приема сообщений с сервера — назовем этот 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()
 
  1. Клиент отправляет IP-адреса и порты различных сокетов на сервер
  2. Когда сервер получает запрос на подключение от клиента, который хочет поговорить с другим клиентом (клиенты идентифицируются по именам пользователей), если оба они находятся «в сети», сервер открывает два ssl-сокета (по одному для каждого клиента), подключается к каждому клиенту notification socket и отправляет ему информацию о сокетах другого клиента.

Проблема

Я не в состоянии выполнить задание № 3. Как я могу создать два ssl-сокета в nodejs и отправлять данные в сокеты python?

Ответ №1:

На дизайнерской ноте я бы сделал это по-другому.

  1. Настройка сервера сокетов для клиента
  2. Каждый клиент открывает сокет-соединение с основным сервером. Для этого используйте websockets или python-socketio. Я полагаю, это то, что вы хотите сделать?
  3. Клиенты отправляют свою информацию на сервер через сокет, а сервер отправляет информацию другим клиентам.
  4. Каждый клиент получает информацию о хостах других клиентов. Теперь вы можете выбрать создание соединений сокетов с другими серверами. N для n хостов.