@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 клиент должны быть связаны через сокеты и могут обмениваться сообщениями.
@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()
после установления соединения, чтобы начать обмен сообщениями между сервером и клиентом.