Сегодня разберём как создать WebSocket средствами Python.
Для этого мы будем использовать веб-сервер tornado. Он позволит нам поднять свой вебсокет в один файл!
Создание сервера с WebSocket
Чтобы установить tornado, необходимо выполнить одну команду.
pip3 install tornado
Далее создадим файл, я его назвал web.py
Со следующим содержанием.
Давайте разберём код подробно.
Сначала импортируем следующие библиотеки.
import tornado.websocket
import tornado.web
import tornado.ioloop
Далее создадим класс, который унаследуем от tornado.websocket.WebSocketHandler
class EchoWebSocket(tornado.websocket.WebSocketHandler):
Затем объявим массив,в который мы будем складывать активных юзеров.
clients = []
Дадим права на обращение к нашему сокету. Здесь мы разрешаем абсолютно всем.
def check_origin(self, origin):
return True
После этого мы переопределим следующие методы. Это обязательно.
def open(self):
EchoWebSocket.clients.append(self)
self.write_message("WebSocket opened")
def on_message(self, message):
for client in EchoWebSocket.clients:
client.write_message(u"You said: " \+ message)
def on_close(self):
EchoWebSocket.clients.remove(self)
print("WebSocket closed")
Метод open срабатывает при подключение пользователя.
Добавим нового пользователя в наш массив.
EchoWebSocket.clients.append(self)
on_message срабатывает, при получении сообщения от пользователей, и отправляет их всем.
А цикл поможет нам его отправить всем "слушателям":
for client in EchoWebSocket.clients:
client.write_message(u"You said: " \+ message)
Последний метод сработает когда юзер отключится.
def on_close(self):
EchoWebSocket.clients.remove(self)
print("WebSocket closed")
Удаляет пользователя из массива.
EchoWebSocket.clients.remove(self)
Реализация класса завершена. Давайте пропишем настройки сервера:
if __name__=='__main__':
app = tornado.web.Application([
(r"/", EchoWebSocket)
])
app.listen(8881)
tornado.ioloop.IOLoop.instance().start()
Услвоие необходимо если Вы запускаете скрипт через консоль. Тогда Python запустит его содержимое.
if __name__=='__main__':
Запишем наши "приложения" и пропишем по какому url можем к ним обращаться
app = tornado.web.Application([
(r"/", EchoWebSocket)
])
Укажем порт
app.listen(8881)
И запустим сервер:
tornado.ioloop.IOLoop.instance().start()
Создание клиента с WebSocket
Теперь нам нужны пользователи, которые будут "слушать" вебсервер по сокетам.
Сделать это можно на любом языке программирования, который поддерживает работу с websocket.
Для примера используем NodeJS
const WebSocket = require('ws');
const ws = new WebSocket('ws://server.domain:8881');
//слушаем сокеты и выводим сообщения
ws.on('message', function incoming(raw) {
console.log(raw)
});
//отправляем данные веб-серверу
function SendMess(){
ws.send('Hello')
}
//шлём сообщение серверу раз в 3 сек, тест
setInterval(SendMess, 3000);
Данную технологию можно использовать для создания чата, например, для мониторинга, для биржи и многого другого.
Код запущен и протестирован, если у вас что-то не работает - спрашивайте.
Документация по серверу
Материал подготовлен автором @zheev
Хороший пост. Спасибо за контент!
Подписался на ваш блог. Подписывайтесь и вы на мой!
@vik 100%
Ваш пост поддержали следующие Инвесторы Сообщества "Добрый кит":
max-max, svetlanaaa, phoenix, galina1, bitt333, tristamoff, vadbars, olga-olga, semasping, arystarch, vika-teplo, amelina.elena, del137, hellen-g, kertar, ifingramota, oksi-m, zhenek, magformers, kanalex, kr-alexey, irisworld
Поэтому я тоже проголосовал за него!
Узнать подробности о сообществе можно тут:
Разрешите представиться - Кит Добрый
Правила
Инструкция по внесению Инвестиционного взноса
Вы тоже можете стать Инвестором и поддержать проект!!!
Если Вы хотите отказаться от поддержки Доброго Кита, то ответьте на этот комментарий командой "!нехочу"
dobryj.kit теперь стал Делегатом! Ваш голос важен для всего сообщества!!!
Поддержите нас: