Обмен технологиями

Подробное объяснение Socket.IO в Python

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Socket.IO Это библиотека двусторонней связи в реальном времени и на основе событий, основанная на WebSocket. Первоначально он был разработан для Node.js, но теперь имеет реализации на нескольких языках, включая Python. В Python,python-socketio — популярная библиотека, позволяющая легко реализовывать клиенты и серверы Socket.IO. Эта библиотека особенно полезна для создания веб-приложений, требующих обмена данными в реальном времени, таких как чат-приложения, системы уведомлений в реальном времени, игры и т. д.

Особенности Python-SocketIO

  • Двусторонняя связь: Клиент и сервер могут отправлять и получать сообщения друг другу.
  • Автоматическое повторное подключение: Клиент может автоматически попытаться переподключиться к серверу, что особенно полезно, когда сеть нестабильна.
  • управляемый событиями: Модель программирования на основе событий делает разработку более интуитивной и гибкой.
  • Многоязычная поддержка: Хотя мы говорим здесь о Python, экосистема Socket.IO поддерживает несколько языков и платформ для легкой интеграции.
  • Совместимость с WebSocket и длинным опросом.: даже в старых браузерах, не поддерживающих WebSocket, связь в реальном времени может быть обеспечена с помощью таких технологий, как длинный опрос.

Установить

Вы можете установить его через pippython-socketio

pip install python-socketio

Если вы также хотите создать веб-сервер и хотите, чтобы он работал как сервер Socket.IO, вам также может потребоваться установитьFlask-SocketIO(Расширение Flask, объединяющее Flask и Socket.IO):

pip install Flask-SocketIO

Создайте сервер с помощью Python-SocketIO.

Ниже приводится простойFlask-SocketIOПример сервера, который использует платформу Flask и интегрирует Socket.IO:

  1. from flask import Flask, render_template
  2. from flask_socketio import SocketIO, send
  3. app = Flask(__name__)
  4. app.config['SECRET_KEY'] = 'secret!'
  5. socketio = SocketIO(app)
  6. @app.route('/')
  7. def index():
  8. return render_template('index.html')
  9. @socketio.on('message')
  10. def handleMessage(msg):
  11. print('Message: ' + msg)
  12. send(msg, broadcast=True)
  13. if __name__ == '__main__':
  14. socketio.run(app)

В этом примере сервер прослушивает/ Маршрутизация и рендеринг HTML-страницы (вам необходимо создать эту страницу самостоятельно и внедрить клиентскую библиотеку Socket.IO).Сервер также прослушивает вызов под названиемmessageСобытие, когда это событие получено, оно печатает содержимое сообщения и передает сообщение обратно всем подключенным клиентам.

клиент

На стороне клиента (обычно JavaScript в браузере) необходимо импортировать клиентскую библиотеку Socket.IO и установить соединение с сервером. Вот простой пример клиента:

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <title>Socket.IO chat</title>
  5. <script src="//cdnjs.cloudflare.com/ajax/libs/socket.io/4.0.0/socket.io.js"></script>
  6. <script>
  7. var socket = io('http://localhost:5000');
  8. socket.on('connect', function() {
  9. console.log('Connected to the server!');
  10. });
  11. socket.on('message', function(msg) {
  12. console.log('Received message: ' + msg);
  13. });
  14. function sendMessage() {
  15. var input = document.getElementById('messageInput');
  16. socket.emit('message', input.value);
  17. input.value = '';
  18. }
  19. </script>
  20. </head>
  21. <body>
  22. <input type="text" id="messageInput" autocomplete="off" /><button onclick="sendMessage()">Send</button>
  23. </body>
  24. </html>

В этом примере клиент подключается к серверу, прослушиваяmessageсобытие и определяетsendMessageФункция отправки сообщений на сервер.

Подведем итог

python-socketioиFlask-SocketIO Предоставляет мощные инструменты для создания веб-приложений реального времени. Используя WebSockets и модель программирования, управляемую событиями, вы можете легко реализовать сложные интерактивные функции в реальном времени.

Мы продолжим обновлять и делиться соответствующим контентом в будущем.Не забудьте обратить внимание!