💾 Оптимизация использования памяти
🚀 Так как в вебсокетах я гоню сырые байты, пришлось заняться лишними аллокациями.
🧐 В итоге углубился в
Span, ArrayPool и stackalloc.📊 Результаты BenchmarkDotNet:
📉 Стандартно: ~200 KB/операция (до 40 ГБ суммарно) + GC (вплоть до Gen2).
✅ Оптимизировано: 0 аллокаций.
⚡️ Скорость: рост в 13–18 раз.
📌 Подходы, которые я попробовал:
1️⃣ Allocating Method (Standard)
🛠 Использование
Split() и т.д. создает избыточные массивы и строки. На больших объемах это кучи мусора, вызывающие тормоза, т.к. идет нагрузка на GC.2️⃣ Оптимизированный подход
🔹
ReadOnlySpan👁 Работаешь как с «окном» в исходный массив
buffer.🚫 Ничего не копируешь просто двигаешься по уже существующим данным.
🔹
ArrayPool🔄 Позволяет брать массивы из пула и потом возвращать обратно. Тут важно не забывать Return, иначе можно словить неприятные баги.
🔹
stackalloc позволяет выделять память прямо на стеке:- очищается после выхода из метода
- подходит только для небольших данных
🔥7
☠️ DDOS на клиента
👨💻 Как вы знаете я тут недавно написал 1 to 1 чат и чёт пришло в голову протестировать сервак и ноут.
🔝 Написал нагрузочный клиент, который создаёт N-ое кол-во клиентов и все они пишут на один адрес, такая армия спамеров, которые пишут раз в 1-3 секунды.
🔟 При
10_000 одновременных юзеров мой ноут вполне справлялся, задержки в районе 2ms на доставку сообщения, которых было 5_000 в секунду, примерно за 15 минут набралось 4млн сообщений.😅 Тогда я решил поднять число до 100_000, но тут мой ноут не выдержал и намертво завис. Но это скорее проблема клиентов, а не сервера, обычно 1 устройство = 1 юзер.
❤4💘4❤🔥2💋1
👨💻 Отправка по имени
☠️ Теперь не надо вводить 4-битный id, можно вписать юзернейм и все будет работать, но что же я поменял?
🆕 Регистрацию сделал через
POST запрос, сервак регистрирует тебя (нельзя иметь два имени одинаковых) и выдает сессионный айдишник, по которому будет происходить коммуникация.💬 Если ты хочешь написать кому-то вводишь его имя и общаешься.
⚙️ Также изменил структуру фрейма из-за чего пришлось написать
FrameWriter и FrameReader, первый позволяет собрать фрейм, второй позволяет всю инфу достать➡️ Фрейм:
[CMD]
[ADDRESS_LEN]
[ADDRESS]
[KEY]
Далее зашифрованная пользователем часть
[TEXT_LEN]
[TEXT]
[NAME_LEN]
[NAME]
❓ У некоторых возникнет резонный вопрос зачем слать ключ это же небезопасно, верно поэтому в реале будет юзаться алгоритм Диффи-Хеллмана, который позволяет вычислить общий ключ на основе пары известных чисел.
🤔 Если так задуматься сюда прикрутить UI, добавить очередь сообщений и вот готовый красивый чат
💀 Но самый небезопасный, что конечно же крайне критично.
🔥4❤1💋1💘1
👥 Группы
💬 Получилось реализовать групповые чаты, по сути группа у меня это такой виртуальный пользователь и если с клиента пришло сообщение в группу, то сервер отправляет это сообщение всем участниками группы в которой они состоят.
🖼️ Что происходит на окнах в скрине:
📢 Левое верхнее и правое нижнее - это люди в группе
💭 Нижнее левое - пишет личное сообщение
📖 Верхнее правое - открыто главное меню со списком чатов
❤2💋1
💻 GitHub Student Developer Pack
⏳ Пока нет особо времени на разработку, решил оформить GitHub Education.
📦 Что это такое: бесплатный набор из около 80 инструментов для студентов. В данном наборе есть многое: курсы, гайды, лицензии на IDE, хостинги и т.д.
📸 Мне понадобилось 4 попытки, чтобы подтвердить статус студента. Первые три отклонили из-за качества фото студенческого.
✅ В итоге статус подтвердили. Сейчас жду выдачу доступов, в течение 72 часов.
👀 Как всё откроется, поделюсь с вами.
🔗 Вот ссылка на весь список https://education.github.com/pack
❤🔥2❤1👍1🔥1💋1
GitHub Education
🎉 Буквально сегодня увидел, что пришли доступы к пакету.
🏆 В профиле уже красуется статус Pro: Copilot активирован, курс от GitHub имеется, остальные инструменты пока не тестил.
⏳ Доступ к Pro-версии GitHub действует 2 года до 04.04.2028. Позже продлю, так как к тому времени я ещё буду учиться.
❤🔥2❤1💋1
Вайбкодинг
🚀 Как и обещал, делюсь первыми впечатлениями: конечно круто, ведь инструментов много, но есть нюанс.
💎 Доступ ко всему вроде есть, но пользоваться всем подряд не получится такой вот парадокс.
📚 Часть плюшек (типа курсов) можно забрать без проблем, для некоторых нужен VPN, но с этим, думаю, все справятся.
💳 Главная проблема в том, что есть сервисы типа DigitalOcean они требуют карту иностранного банка или PayPal для проверки на бота, а у меня сейчас этого нет.
🤖 Также решил повайбкодить и загнать Copilot в IDE, чтобы перенести систему обновлений из одного проекта в другой.
🤔 Лично у меня такой формат не вызывает того удовольствия и удовлетворения от программирования, которое есть, когда пишешь всё сам.
💡 Но могу отметить: если использовать ИИ как помощника, который предлагает альтернативы, ищет ошибки это реально удобно.
⚡ Особенно когда можно делать это прямо в IDE, не переключаясь на браузер.
❤5💋1
🎨 Генерация изображений
⌛ Примерно около года назад Open AI выпустили свою модель для генерации осмысленных картинок.
😊 В свое время я ее потестил, можете сравнить.
📈 И сейчас буквально на днях они презентовали свою новую версию
image_gen, которая генерирует ещё более красивые, реалистичные и главное осмысленные изображения.☝️ Вверху тот же сюжет, что я просил сгенерировать год назад и мне очень нравится прогресс.
❤5
🏎️ Maximus
⌛ Чуть больше двух недель назад сел за разработку следующей версии NFS-MaxEd, нынче называемой Maximus.
👨💻 Из проделанного: система обновлений, новая кодогенерация, импорт nfsms-скриптов (требовались ещё проверки).
😓 Но вчера проект стёрся, и меня откинуло назад на 2 недели. Почти весь прогресс стёрся, но это будет мне уроком.
⚒️ Сейчас занимаюсь новой системой кодогенерации, а также написал прогу для проверки корректности сгенерированных скриптов.
🖼️ С помощью неё я могу кинуть несколько пар скриптов и потом удобно видеть, где они отличаются (красные строки).
🔍 Это очень сокращает время на поиск несостыковок. На глаз я бы с ума сошёл сверять построчно каждый скрипт с эталоном.
1🔥4❤1
👨💻 Решил освежить свое рабочее место и заменил табуретку на данное кресло, сидеть за кодом стало в разы приятнее.
🙃 Сравнительный комментарий дать не могу, так как это мое первое кресло, но я доволен.
⬆️ Однако кое-что сказать могу, учитывая мой рост (189 см), сидеть в нем вполне приятно, кресло немаленькое, можно даже лечь.
☀️ Также поздравлю всех с первым мая!
🙃 Сравнительный комментарий дать не могу, так как это мое первое кресло, но я доволен.
⬆️ Однако кое-что сказать могу, учитывая мой рост (189 см), сидеть в нем вполне приятно, кресло немаленькое, можно даже лечь.
☀️ Также поздравлю всех с первым мая!
❤3🔥2🥰2👍1