Войти
ПроектыФорумОцените

Разработка open-source игры в прямом эфире (3 стр)

Страницы: 1 2 3 4 5 Следующая »
#30
20:14, 8 июня 2021

GhostCoderPPetrov
Правильно ли я тебя понял:
у тебя в логике есть обьекты со строками
перед отправкой ты создаешь еще обьект с массивом вместо строк
потом ты его пишешь в сокет?
А прием так:
читаешь из сокета в обьект с массивами, потом перекладываешь в обьект со строками?


#31
20:21, 8 июня 2021

Mephistopheles
да, получается что так

#32
20:24, 8 июня 2021

Mephistopheles
сейчас нашел https://github.com/m3janitha/fixed_size_string

https://github.com/m3janitha/fixed_size_string/blob/master/includ… ed_size_str.h
там есть класс-строка с фиксированной длиной, fss::basic_str, fss::fixed_size_str

возможно мне что-похожее надо реализовать, или использовать вот это

#33
22:04, 8 июня 2021

Mephistopheles
сейчас добавил свой адаптированный класс String255, основанный на библиотеки fixed_size_string
структура Login получилась такая:

    struct Login : public Base
    {
        String255 login;
        String255 password;
        String255 full_name;

        Login()
        {
            type = EType::Login;
            static_assert(MAX_SIZE > sizeof(*this), "packet size exceeds the maximum allowed size");
        }
    };

Геттеры\сеттеры пошли лесом, вместо них - публичные поля.

#34
14:18, 9 июня 2021

GhostCoderPPetrov
> да, получается что так
А почему сразу не создавать обьекты со строками? Пропуская лишнюю аллокацию?

#35
22:50, 9 июня 2021

Mephistopheles
Ты про какой момент времени?
Про временную аллокацию на стеке массива в методе getPassword()? Так ее уже нет сейчас.

Да, согласен, ее и раньше могло не быть, а сразу строка std::string могла создаваться, c использвованием явного размера, например:

std::string getPassword() const
{
    return std::string(password, password + sizeof(password));
}
Это работает даже в том случае, если массив password не оканчивается 0 символом.

Я просто боялся что этому констуктору нужна будет null-terminated string,
а сам метод getPassword() const был константный, т.е. не мог менять поле password,
чтобы сделать в духе

std::string getPassword() const
{
    password[sizeof(password) - 1] = 0; // ошибка, password только для чтения
    return std::string(password, password + sizeof(password));
}
и поэтому были танцы с бубнами, с копированием массива во временным локальный массив,
явное присваивание 0 символа и инициализация std::string().
Ну вообщем из-за перестраховки такая вот еруна получалась.

Или ты про что-то другое?

#36
23:59, 9 июня 2021

Я был ранее не прав... программисты не должны получать 10-15к. Они должны  их доплачивать работодателю.

Что тут за ересь с кучей какойто хрени? Логин он и в африке логин. Получить данные от пользователя, проверить валидность передать на сервер, проверить в базе получить ответ. Какие к черту классы улучшения извращения и прочее???? Вы может шутите?

#37
0:20, 10 июня 2021

GhostCoderPPetrov
> Так ее уже нет сейчас.
хорошо:)

FourGen
> Получить данные от пользователя, проверить валидность передать на сервер,
> проверить в базе получить ответ. Какие к черту классы улучшения извращения и прочее?
мы обсуждаем варианты реализации данного алгоритма.

#38
0:26, 10 июня 2021

Там миллионы коннектов с минуту? Там проблемы какие то есть? Вы бы обозначили бы суть вопроса, для чего? Какая проблема решается? И алгоритмов их не так много. Все зависит от задачи, а вот этой задачи не вижу.

#39
0:38, 10 июня 2021

GhostCoderPPetrov
> Объявить структуру данных для UDP пакета для пересылки по сети.

Авторизацию нужно проводить по https, в ответ клиенту отправляется хэш ключа, который проверяется на правильность при обмене данными между сервером и клиентом.

Кстати а если логин и пароль не английскими буквами у тебя будет? Перейдешь на utf8?

Сделай  класс NetPacket.  пусть там будут абстрактные методы Pack и Unpack, которые упаковывают и распаковывают данные. Наследуй от него какой нибудь UserInfoPacket в котором хранится инфа о пользователе и пусть какой нибудь HTTPSClient отправляет это серверу.

#40
(Правка: 0:42) 0:41, 10 июня 2021

FourGen
зануда.

#41
0:53, 10 июня 2021

Мдя. Возможно.

#42
10:09, 10 июня 2021

std::cin
https - это протокол TCP.
Я вот прочитал статью.
В которой говорится есть подраздел "Почему никогда не стоит использовать TCP для многопользовательских игр".

И в заключение:

Я рекомендую не просто использовать UDP, но и использовать только UDP и больше ничего. Не используйте TCP и UDP вместе — вместо этого лучше узнайте, как реализовать те “фишки” TCP, которые вам нужны, самостоятельно, на основе UDP.

#43
11:17, 10 июня 2021

GhostCoderPPetrov
TCP гарантирует доставку и целостность пакетов. Это важно при регистрации, авторизации и других вещах где важно чтобы инфа была доставлена и обработана. Кроме того секретные данные должны быть защищены шифрованием. Это уже HTTPS и сертификат.

UDP ничего не гарантирует. Это используется при потоковой передаче данных, где целостность не важна, а важна скорость и актуальность на момент получения. Например ты шпаришь на сервак ввод от пользователя, а он в ответ тебе шлёт его позицию. Пакеты могут теряться, но это не важно, потому что за потерянным пакетом придёт еще один.

Думаю ты суть уловил.

Если ты вход на сервер будешь делать через UDP при нестабильном соединении, пользователи тебя проклянут.

#44
11:46, 10 июня 2021

std::cin
Ну блин это же все расжевано в статье, на которую я давал ссылку в предыдущем собщениии.
Автор утверждает, что для высокой производительности нужно полностью отказаться от TCP,
а для случаев когда нужна гарантия доставки - реализовать этот механизм самим.

Смешаный трафик TCP + UDP имеет худщую производительность чем UDP + собственные механизмы доставки для каких-то типов пакетов.

Страницы: 1 2 3 4 5 Следующая »
ПроектыФорумОцените