Я уже довольно давно избегаю розеток. Когда меня попросили создать небольшие чат-приложения (чтобы избавить себя от проблем с изучением сокетов), я отложил задачу или, в худшем случае, прибег к дешевым уловкам, таким как бесконечная перезагрузка серверных скриптов, написанных на 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–1 чата.
- Исследуйте комнаты в розетках, создавая приложение для чата.
- Бонусное приложение, над которым я буду работать по мере того, как буду лучше разбираться в сокетах.
В качестве последнего совета.
