Найти в Дзене

💬Создаю свой чат на Python с использованием Socket.IO и PySide6. Часть 1

Всем привет! На связи енотик 🦝 И сегодня в этой короткой статье я бы хотел вам рассказать начало истории создания своего 💬 чата на Python, разработка которого продолжается и по сей день 👾 Всем привет, мой канал стал каким-то совсем заброшенным последнее время. Все дело в том, что меня захватила рутина повседневности и работы. Плюсом осенью 2024 я совсем выгорел, о чем я писал в недавней статье Но, времени зря не терял, в уныние не впадал, изучал Python и все что с ним связано. Иными словами, пытался бороться с выгоранием методом изучения чего-то нового для себя. В октябре 2024 даже решился попробовать создать свой чат, с возможностью голосовой связи. Собственно именно на этот проект у меня и уходила львиная доля моего свободного времени. И сейчас как по мне, пришло время поделиться результатами и рассказать о процессе создания моего чата. Все началось с новости о блокировке Discord. Да, на тот момент можно было использовать Skype (к слову Skype теперь ВСЁ) или Telegram для аудио
Оглавление

Всем привет! На связи енотик 🦝 И сегодня в этой короткой статье я бы хотел вам рассказать начало истории создания своего 💬 чата на Python, разработка которого продолжается и по сей день 👾

🌊вВодная часть

Всем привет, мой канал стал каким-то совсем заброшенным последнее время. Все дело в том, что меня захватила рутина повседневности и работы. Плюсом осенью 2024 я совсем выгорел, о чем я писал в недавней статье

Но, времени зря не терял, в уныние не впадал, изучал Python и все что с ним связано. Иными словами, пытался бороться с выгоранием методом изучения чего-то нового для себя. В октябре 2024 даже решился попробовать создать свой чат, с возможностью голосовой связи. Собственно именно на этот проект у меня и уходила львиная доля моего свободного времени. И сейчас как по мне, пришло время поделиться результатами и рассказать о процессе создания моего чата.

0️⃣Начало

Все началось с новости о блокировке Discord.

Discord заблокирован в России: причины, что дальше, есть ли аналоги

Да, на тот момент можно было использовать Skype (к слову Skype теперь ВСЁ) или Telegram для аудио связи, но хотелось создать что-то свое, да и к тому же прокачать свои навыки в Python. Вот собственно и решил я совместить приятное с полезным. Где-то за неделю у меня получилось создать рабочий консольный клиент 0.0.1 на Socket.IO и сервер для обмена текстовыми сообщениями. Там могли общаться все со всеми. К слову серверная часть чата крутилась на арендованном мною VPS (постараюсь об этом написать в отдельной статье позднее). Далее встал вопрос о создании аккаунтов и адресации сообщений среди пользователей. И для решения этого вопроса уже нужно использовать базу данных.

🗄База данных SQLite и первый интерфейс

Для создания базы данных я решил использовать простую встраиваемую СУБД SQLite. Мне она очень нравиться своей простотой и в особенности тем, что Python поддерживает работу с ней сразу из коробки. После создания БД и модификации клиента для работы с ней, вышла версия 0.0.2. В этой версии я уже прикрутил простенький графический интерфейс на PySide6. Дизайн тут конечно не блещет, главное функционал: текстовые сообщения и первые тесты голосовых звонков.

Версия чата 0.0.2
Версия чата 0.0.2

По началу с голосовыми звонками было тяжело, особенно с попытками прикрутить протокол WebRTC. Проведя без малого месяц в попытках обуздать peer-to-peer соединение я потерпел фиаско. Но, отчаиваться не стал, начал копать в другую сторону - пакетная передача аудио чанков. Знаю, что это уже прошлый век - но мне хотелось сделать. Спустя неделю опытов и отладки передача аудио была готова. Чтобы начать аудио разговор в чате - нужно чтобы два клиента были онлайн и нажали кнопку с зеленой трубкой (не обязательно одновременно). Для завершения разговора - нужно было нажать на красную. То есть, работа была на подобии подключения к аудио каналу, без уведомления о звонке и так далее.

После более менее рабочего алгоритма аудио разговоров я начал работать над графическим интерфейсом. И первым делом начал улучшать внешний вид сообщений чата.

Версия 0.0.2 с новым видом сообщений
Версия 0.0.2 с новым видом сообщений

🌄 Новое GUI

Сообщения работают, голосовая связь есть. Вроде все сделано, что я планировал. Мы с другом пользуемся моим творением, связываемся через мой чат для разговоров во время игр. Можно было бы и остановиться на достигнутом, но я это я - енотик, которому всегда мало и всё интересно.

В поисках информации о том, как улучшить графический интерфейс своего чата я наткнулся на одну интересную страницу на GitHub.

GitHub - ag-python-qt/PyBlackBox_v1.0.0

Там один добрый человек под лицензией MIT разместил прототип графического дизайна чата. Мне он очень приглянулся и я решил взять его на вооружение. Изучив все особенности и структуру его каркаса, я начал его переделывать под себя. После нескольких недель разработки, появляется версия 0.0.3а с новым графическим интерфейсом.

Версия 0.0.3а
Версия 0.0.3а

После успешной адаптации каркаса под свой бэкэнд, у меня появилась целая масса идей что можно ещё улучшить и доработать. Перевел клиент на асинхронную и многопоточную работу. Улучшил работу аудио связи, реализовав механизм звонков и применив кодек сжатия Opus. Добавил возможность устанавливать всем пользователям свои аватарки и текстовые статусы, прям как в ICQ нулевых. Обо всем этом я расскажу в следующих статьях 😊. Также расскажу о массе трудностей с которыми пришлось столкнуться в процессе разработки. Ведь после успешной адаптации нового графического интерфейса жизнь проекта, можно сказать, только началась.

Спасибо за прочтение! 🦝 Всем удачи! Надеюсь было интересно

-5