HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Half-Life SDK (https://hlfx.ru/forum/forumdisplay.php?forumid=8)
-- Эвент против мессаги. (https://hlfx.ru/forum/showthread.php?threadid=4675)
Отправлено Ghoul [BB] 11-10-2015 в 06:36:
Эвент против мессаги.
Пришло время разрешить наш давний спор с ~Х~ относительно того, что экономичнее для траффика и более стабильно в работе: эвент или мессадж.
Моя история: много зим тому, на этапе программирования HLWE, я получил консультацию по асечке от того, чьё имя на данном форуме не надлежит произносить в слух, и память о ком подлежит забвению....
Так вот, эвенты были сделаны Вальве впопыхах,механизм их не отлажен, работают не стабильно, периодически пакеты данных не доходят, а координаты передаются не точно.
Ну и, конечно, они громоздкие. Если нужно передать, скажем, индекс энтити и её координату, то нам требуется 7 байт, а эвент пожирает 255.
Но товарищ ~Х~ всячески за эвенты. И он напрочь отметает все вышеприведенные аргументы. И поспорить сложно - все-таки он хороший погромист и написал очень стабильную платформу, а так же над траффиком трясется, как скупой над медным грошиком.
Поэтому и обращаюсь я к вам, к тем, кто скрывается за красивыми аватарками, с такими словами: не надо мне ни денег, ни еды, ни работы, ни подработки, а помогите лишь разрешить этот давний спор!!!
__________________
Ты топчешь мир своими ботинками,
Не замечая куда наступаешь,
А время от тебя уходит цветными картинками,
Но ты даже этого не понимаешь.
Компрометирую данные своей учётной записи.
ЛОГИН: Ghoul [BB]
ПАРОЛЬ: paladin_solo
Отправлено PLut 11-10-2015 в 07:29:
Ghoul [BB] В последнее время предпочитаю эвенты, не вдавался в подробности, как и что работает, просто пользуюсь и доволен.
__________________
Base Defense on Steam, ModDB
Отправлено XaeroX 11-10-2015 в 08:13:
Вопрос можно задать иначе: что лучше, молоток или отвёртка?
Прежде, чем задаваться такими вопросами, нужно хорошо понять, что такое эвенты и зачем Вальва их добавила в движок? (Впопыхах или нет - я не знаю, но работают они отлично и задачу свою решают на все сто - в частности, с помощью эвентов я снизил трафик хедкрап френзе в 2-3 раза). Выбор между эвентом и мессагой всегда очевиден, точно так же как между молотком и отвёрткой: мало кому придёт в голову забивать в доску шуруп, равно как и стучать отвёрткой по гвоздю. Другой вопрос, что если молодые и неопытные погромизты рассматривают эвенты как часть системы клиентских пушек (что, кстати говоря, недалеко от истины) и юзают их исключительно там, а всякие train pitch adjust считают мелким недоразумением, то опытные - начинают эти эвенты тащить и куда надо, и куда не надо, что приводит к разрухе в головах и путанице в коде.
Цитата:
Ghoul [BB] писал:
Если нужно передать, скажем, индекс энтити и её координату, то нам требуется 7 байт, а эвент пожирает 255.
Я долго думал, считал так и эдак, но так и не смог понять, откуда взяты числа 7 и 255? Поясни, пожалуйста, как считал ты.
Цитата:
Ghoul [BB] писал:
периодически пакеты данных не доходят, а координаты передаются не точно.
Чтобы евент стопроцентно доходил, надо посылать его с флагом FEV_RELIABLE. Ты же не удивляешься, что мессаги MSG_BROADCAST или MSG_PVS могут не дойти? Так и тут.
Координаты всегда передаются неточно, т.к. посылаются в размере 16 бит. А размер флоата, как известно, чуть побольше.
Отправлено Ku2zoff 11-10-2015 в 08:37:
Цитата:
XaeroX писал:
Выбор между эвентом и мессагой всегда очевиден, точно так же как между молотком и отвёрткой: мало кому придёт в голову забивать в доску шуруп, равно как и стучать отвёрткой по гвоздю.
Не совсем очевиден. Мало примеров использования. Вот с помощью мессаг делают всё, что не лень. А с помощью эвентов только пушки, да гибсы с дверьми в DMC.
Отправлено Ghoul [BB] 11-10-2015 в 08:44:
Цитата:
XaeroX писал:
Я долго думал, считал так и эдак, но так и не смог понять, откуда взяты числа 7 и 255? Поясни, пожалуйста, как считал ты.
Ну вот смотри, браток:
насчет мессаги скажу точно, откуда размер:
gmsgTrail = REG_USER_MSG("Trail", 9);
void FX_Trail( Vector origin, int EntIndex, int Type )
{
MESSAGE_BEGIN( MSG_ALL, gmsgTrail );
WRITE_COORD( origin.x );
WRITE_COORD( origin.y );
WRITE_COORD( origin.z );
WRITE_SHORT( EntIndex );
WRITE_BYTE( Type );
MESSAGE_END();
}
Сорри, ошибся, не 7 а 9. Но разница не велика.
Про 255 доказать не могу, но те же несколько лет назад где-то читал.
Но даже приблизительно можно прикинуть размер, исходя из того, что мы знаем структуру эвента и нулевые параметры все равно передаются.
PLAYBACK_EVENT_FULL(flags(1byte), entindex(2bytes), event name(2bytes), 0(1byte), origin(6bytes), angles(6bytes), 0.0(2bytes), 0.0(2bytes), 0(1byte), 0(1byte), 0(1byte), 0(1byte));
Хм... 26 байт...
Возможно, еще где-то что-то передается в эвенте? Точно помню цифру в 255 байт на эвент....__________________
Ты топчешь мир своими ботинками,
Не замечая куда наступаешь,
А время от тебя уходит цветными картинками,
Но ты даже этого не понимаешь.
Компрометирую данные своей учётной записи.
ЛОГИН: Ghoul [BB]
ПАРОЛЬ: paladin_solo
Отправлено XaeroX 11-10-2015 в 09:10:
Цитата:
Ghoul [BB] писал:
нулевые параметры все равно передаются
А эту глупость, браток, ты тоже не помнишь, где читал? 
Добавлено 11-10-2015 в 15:10:
Цитата:
Ku2zoff писал:
Не совсем очевиден. Мало примеров использования.
Если знаешь теорию - примеры использования не так уж важны. Сам сколько угодно примеров напишешь.
Добавлено 11-10-2015 в 15:10:
Цитата:
Ghoul [BB] писал:
Точно помню цифру в 255 байт на эвент....
Четверть килобайта. Ну сам подумай - адекватно ли?
Отправлено Ghoul [BB] 11-10-2015 в 13:49:
Цитата:
XaeroX писал:
А эту глупость, браток, ты тоже не помнишь, где читал?
Я читал, что мессаги передаются как массив данных. Не?
Добавлено 11-10-2015 в 16:36:
Цитата:
XaeroX писал:
Четверть килобайта. Ну сам подумай - адекватно ли?
Не адекватно.
а мои подсчеты ближе к реальным размерам?
Добавлено 11-10-2015 в 16:49:
Я ещё слишком юн, и мне предстоит многому научиться, поэтому не суди слишком строго, браток, а лучше расскажи об эвентах всю правду, как на духу.
это позволит развеять мифы вокруг них и, думаю, будет полезно не только мне.__________________
Ты топчешь мир своими ботинками,
Не замечая куда наступаешь,
А время от тебя уходит цветными картинками,
Но ты даже этого не понимаешь.
Компрометирую данные своей учётной записи.
ЛОГИН: Ghoul [BB]
ПАРОЛЬ: paladin_solo
Отправлено Government-Man 11-10-2015 в 15:00:
XaeroX
Ты б лучше про эвенты да про мессаги рассказал подробнее.
А как молоток и отвертку использовать мы и сами знаем - мы ж программисты в конце концов.
Отправлено Crystallize 11-10-2015 в 15:07:
Цитата:
XaeroX писал:
мало кому придёт в голову забивать в доску шуруп
Кроме тех рабочих которых я видел в начальной школе в конце 90х. Они объяснили, что шуруп-универсальная вещь, хочешь забивай, хочешь завинчивай.
Отправлено XaeroX 11-10-2015 в 15:16:
Цитата:
Government-Man писал:
Ты б лучше про эвенты да про мессаги рассказал подробнее.
На самом деле я бы очень хотел подробно рассказать.
Но сейчас мне не хочется.
В принципе, в сорцах ксаша всё довольно прозрачно.
Может, однажды у меня появится время и я напишу статейку на эту тему.
Отправлено Ghoul [BB] 13-10-2015 в 09:39:
Вот видишь, браток, нам нужно сейчас. А завтра уже будет поздно.
Несвоевременность - худшая драма....
__________________
Ты топчешь мир своими ботинками,
Не замечая куда наступаешь,
А время от тебя уходит цветными картинками,
Но ты даже этого не понимаешь.
Компрометирую данные своей учётной записи.
ЛОГИН: Ghoul [BB]
ПАРОЛЬ: paladin_solo
Отправлено XaeroX 13-10-2015 в 09:48:
Ghoul [BB]
Вам 15 лет было по-барабану, как работают эвенты, вы спокойно обходились без них - а тут вдруг срочно понадобилось? 
Отправлено ~ X ~ 14-10-2015 в 08:27:
Цитата:
XaeroX писал:
Вам 15 лет было по-барабану, как работают эвенты, вы спокойно обходились без них - а тут вдруг срочно понадобилось?

Для меня основное преимущество эвентов - FEV_UPDATE (когда при накоплении одинаковых сообщений в очереди отсылается только самое новое). Для вальвы - перспектива (не сбывшаяся) написания скриптов.
А ещё их может быть чуть ли не 1024 штуки (забыл уже точное число), а мессаг - только 127 или 191 (в 1111 число увеличили... чуть-чуть).
Чем плохи эвенты - фиксированным набором параметров. Но тут иная парадигма - эвент - это "событие", тут не предусмотрена кастомизация. А вот мессагой с сервера всегда было принято передавать цвет, кадр, размер, время, спрайты и прочие атрибуты эффектов. Мне, как человеку, который стремится сделать всё настраиваемым, это ни разу не нравится. Но так оно всегда: выбираешь между тёплым и мягким.__________________
Минутка полезного:
Бесплатный UT-подобный Half-Life mod.
Бесплатный редактор для 32-битных текстур. Без дотнета.
Бесплатный IDE для любых компиляторов и ЯП.
Бесплатная Windows-подобная ОС.
Проверка грамматики русского языка.
Чат по hl[fx]: [email protected]
Отправлено Ghoul [BB] 14-10-2015 в 09:46:
Цитата:
~ X ~ писал:
Мне, как человеку, который стремится сделать всё настраиваемым, это ни разу не нравится
А кто настраивать то будет, браток? Я наоборот считаю, что пользователь никуда не полезет и ему абсолютно плевать, как работает. а настраивать будут только те, кто пишет модификации. Я пока таких только двоих могу назвать.
а куча лишних параметров тоько с толку сбивает. Знаю и сталкиваюсь постоянно с этим в твоем коде. Все должно быть жёстко.__________________
Ты топчешь мир своими ботинками,
Не замечая куда наступаешь,
А время от тебя уходит цветными картинками,
Но ты даже этого не понимаешь.
Компрометирую данные своей учётной записи.
ЛОГИН: Ghoul [BB]
ПАРОЛЬ: paladin_solo
Отправлено ~ X ~ 14-10-2015 в 15:03:
Цитата:
Ghoul [BB] писал:
Все должно быть жёстко.
Действительно - миллионы мухтысячи яблочников чувствуют жёсткость у себя в ректуме - и живут же.
Нет, мне так не пойдёт. Я хочу чтоб всё было настраиваемо админом сервера - даже цвет луча гаусса.__________________
Минутка полезного:
Бесплатный UT-подобный Half-Life mod.
Бесплатный редактор для 32-битных текстур. Без дотнета.
Бесплатный IDE для любых компиляторов и ЯП.
Бесплатная Windows-подобная ОС.
Проверка грамматики русского языка.
Чат по hl[fx]: [email protected]