Как связать python и node js через socket и socket.io-client?

Пользователь

от evalyn.barrows , в категории: Python , 9 месяцев назад

Как связать python и node js через socket и socket.io-client?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от richie_mayert , 9 месяцев назад

@evalyn.barrows 

Для связи между Python и Node.js через сокеты и socket.io-client, вам потребуется использовать библиотеки для работы с сокетами и socket.io в обоих языках.


В Python вы можете использовать библиотеку socketio, которая предоставляет возможность взаимодействия с сокетами и поддерживает протокол socket.io. Установите ее с помощью следующей команды:

1
pip install python-socketio


Пример кода для создания сервера Python с использованием библиотеки socketio:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
import socketio

sio = socketio.Server()

@sio.event
def connect(sid, environ):
    print('Connected', sid)

@sio.event
def disconnect(sid):
    print('Disconnected', sid)

@sio.event
def my_event(sid, data):
    print('Message:', data)
    sio.emit('my_response', {'data': 'Response from server'}, room=sid)

app = socketio.WSGIApp(sio)

if __name__ == '__main__':
    socketio.WSGIRunner(app).run()


Для связи с Node.js вы можете использовать socket.io-client, который предоставляет клиентскую реализацию сокетов и протокола socket.io в Node.js. Установите его с помощью следующей команды:

1
npm install socket.io-client


Пример кода для создания подключения Node.js к серверу Python:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
const io = require('socket.io-client');
const socket = io.connect('http://localhost:8000');

socket.on('connect', () => {
    console.log('Connected', socket.id);
});

socket.on('disconnect', () => {
    console.log('Disconnected', socket.id);
});

socket.on('my_response', (data) => {
    console.log('Response:', data);
});

socket.emit('my_event', 'Message from client');


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


Теперь Python сервер и Node.js клиент должны быть связаны через сокеты и могут обмениваться сообщениями.

Пользователь

от willa_will , 25 дней назад

@evalyn.barrows 

Прекрасный пример, но следует отметить, что socket.io работает на основе протокола WebSockets, а не нативных сокетов, и socket.io-client в Node.js предоставляет интерфейс для взаимодействия с сервером, поддерживающим протокол socket.io.


Для установки библиотеки socketio в Python используйте следующую команду:

1
pip install "python-socketio[asyncio_client]"


А для установки библиотеки socket.io-client в Node.js:

1
npm install socket.io-client


Пример кода для создания сервера Python с использованием библиотеки socketio:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import asyncio
import socketio

sio = socketio.AsyncServer(async_mode='asgi')

@sio.event
async def connect(sid, environ):
    print('Connected', sid)

@sio.event
async def disconnect(sid):
    print('Disconnected', sid)

@sio.event
async def my_event(sid, data):
    print('Message:', data)
    await sio.emit('my_response', {'data': 'Response from server'}, room=sid)

app = socketio.ASGIApp(sio)

if __name__ == '__main__':
    import uvicorn
    uvicorn.run(app, host="127.0.0.1", port=8000)


Пример кода для создания клиента на Node.js с использованием библиотеки socket.io-client:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
const io = require('socket.io-client');
const socket = io('http://localhost:8000');

socket.on('connect', () => {
    console.log('Connected', socket.id);
    socket.emit('my_event', 'Message from client');
});

socket.on('disconnect', () => {
    console.log('Disconnected', socket.id);
});

socket.on('my_response', (data) => {
    console.log('Response:', data);
});


Обратите внимание, что в данном примере сервер Python запущен на порту 8000. Вам нужно будет подставить IP-адрес и порт вашего сервера Python в клиентский скрипт. Кроме того, не забудьте вызывать метод connect() после установления соединения, чтобы начать обмен сообщениями между сервером и клиентом.