Я уже довольно давно избегаю розеток. Когда меня попросили создать небольшие чат-приложения (чтобы избавить себя от проблем с изучением сокетов), я отложил задачу или, в худшем случае, прибег к дешевым уловкам, таким как бесконечная перезагрузка серверных скриптов, написанных на PHP / Node.js, / Flask и некоторых асинхронных магия с использованием Ajax. Я ненавидел себя каждый раз, когда делал это, потому что, честно говоря, я разрабатывал некачественный продукт, который нельзя было масштабировать. Итак, наконец, я набрался смелости, чтобы схватить дьявола и решить эту проблему раз и навсегда.

Введение в WebSockets.

WebSocket был введен в HTML5 для облегчения взаимодействия между клиентами и сервером. Соединение WebSocket - это постоянный двунаправленный канал связи между клиентом и сервером.

Соединения WebSocket особенно полезны в условиях низкой задержки.

Чтобы иметь возможность создавать веб-приложение с использованием сокетов, сокет должен быть реализован как на уровне сервера, так и на уровне клиента. Следовательно, мне нужно было выбрать серверный язык и интерфейсный язык с подходящей реализацией сокетов, я выбрал SocketIO (JavaScript) и Flask-Sockets (Python) для внешнего и внутреннего интерфейса соответственно.

Что такое SocketIO?

SocketIO - это кроссбраузерная библиотека Javascript, которая абстрагирует клиентское приложение от реального транспортного протокола. Для современных браузеров используется протокол WebSocket, но для старых браузеров, в которых нет WebSocket SocketIO, эмулирует соединение с помощью одного из старых решений, лучшего из доступных для каждого конкретного клиента.

// Establishing connection with the server hosted at domain:port
var socket = io.connect('http://domain:port');
// Listening for event named `any event`
socket.on('any event', function(msg) {
        console.log(msg);
});

Код для работы сокетов в JS довольно прост, как видно в приведенном выше примере.

А как насчет Flask-Sockets?

Flask-SocketIO создает среду для обработчиков событий, близкую к среде обычных функций просмотра, включая создание контекстов приложений и запросов. Давайте посмотрим на некоторые операции, которые можно выполнять с помощью сокетов flask.

Инициализация.

#A bunch of import statements which you should ignore for now
from flask import Flask, render_template
from flask_socketio import SocketIO

app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret!'
socketio = SocketIO(app)

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

Получение сообщений от клиента.

@socketio.on('message')
def handle_message(message):
    print('received message: ' + message)

Отправка сообщений клиенту.

from flask_socketio import send, emit
@socketio.on('my event')
def handle_my_custom_event(json):
    emit('my response', json)

План впереди.

Чтобы полностью понять концепцию, я решил разделить процесс на сегменты, чтобы упростить задачу. Я планировал создать 4 приложения с использованием сокетов.

  1. Изучите основы сокетов, построив ползунок диапазона, который будет синхронизироваться между несколькими клиентами.
  2. Изучение концепций пространств имен и сеансов в сокетах путем создания приложения 1–1 чата.
  3. Исследуйте комнаты в розетках, создавая приложение для чата.
  4. Бонусное приложение, над которым я буду работать по мере того, как буду лучше разбираться в сокетах.

В качестве последнего совета.