ENet - Сетевая UDP-библиотека с гарантией доставки

Модератор: Модераторы

ENet - Сетевая UDP-библиотека с гарантией доставки

Сообщение Black Doomer » 25.02.2015 21:58:04

ENet - Reliable UDP networking library

Официальный сайт (на английском)

ENet - это сетевая библиотека, реализующая поверх UDP лёгкий и в то же время мощный протокол с ленивой гарантией доставки (т.е. пакет будет доставлен, но без использования всяких ресурсоёмких методик адаптации к условиям сети) и множеством других полезных функций. Данный протокол идеально подходит для realtime-игр, в которых скорость отсылки данных в сетевой игре важнее гарантии их доставки, однако сама она в некоторых случаях необходима - это обусловлено тем, что ENet сам изначально создавался для небезызвестной Cube. Стоит заметить, что несмотря на свою игровую направленность, этот протокол можно с не меньшим успехом использовать и в других сферах деятельности.

Так чем же так хорош ENet? Что ж, приведу краткий список:
  • Собственная система сокетов, аналогичная стандарту сокетов Беркли.
  • Возможность опциональной отправки пакетов как с гарантией доставки, так и без неё, причём в рамках одного и того же сокета.
  • Порядок пакетов соблюдается принимающей стороной вне зависимости от гарантии их доставки (т.е. если опоздал гарантированный пакет, то он будет ожидаться, в противном же случае он будет забыт и в случае прибытия просто отброшен, не тормозя таким образом приём). Однако также присутствует возможность отправлять пакеты вне последовательности без гарантии её соблюдения.
  • Возможность канальной отсылки пакетов (один канал - одна соблюдаемая последовательность) и их мультиплексирование в рамках одного и того же сокета.
  • Поддержка Windows и Unix.
  • Ну и в конце концов, эта библиотека обеспечивает действительно БЫСТРУЮ и СТАБИЛЬНУЮ сеть при грамотном её использовании, в котором она весьма проста при сохранении широты возможностей.

Более полный и подробный список можно прочитать на официальном сайте.
Там же можно ознакомиться с обучающими примерами использования.

В этой теме представлены заголовочные файлы для использования этой библиотеки в FreePascal.

В рамках создания мультиплеера в Doom 2D: Forever я транслировал заголовочные файлы ENet с Си на Delphi 7 (кому интересно, вот ссылка на них). Однако вскоре коллективом разработчиков было принято решение по возможности как можно быстрее заняться разработкой проекта с нуля на FreePascal дабы избавиться от большого количества старого, плохо поддерживаемого и местами довольно-таки кривого кода. Для этого я адаптировал заголовочные файлы для Delphi 7 под FreePascal с использованием его возможностей. И заодно решил поделиться ими с потенциально заинтересованными в этой библиотеке людьми, то есть вами. :)
Как по мне, ENet незаслуженно малоизвестен среди русских разработчиков, поэтому я надеюсь, что так или иначе поспособствую выправлению этой несправедливости.

Что ж, желаю удачного использования!
Вот ссылка: https://github.com/cher-nov/enet-fpc
Любые отзывы и критика также приветствуются.)
Последний раз редактировалось Black Doomer 13.11.2023 21:32:52, всего редактировалось 3 раз(а).
Аватара пользователя
Black Doomer
незнакомец
 
Сообщения: 3
Зарегистрирован: 25.02.2015 14:39:13
Откуда: Vladivostok, Russia

Re: ENet - Сетевая UDP-библиотека с гарантией доставки

Сообщение Zhbr » 25.02.2015 22:55:11

Хорошая новость)
Планируется ли трасляция unix.h?
Zhbr
новенький
 
Сообщения: 44
Зарегистрирован: 31.01.2014 02:34:21

Re: ENet - Сетевая UDP-библиотека с гарантией доставки

Сообщение Black Doomer » 26.02.2015 03:25:19

Zhbr писал(а):Планируется ли трасляция unix.h?

Так ведь уже.) Я объединил транслированные win32.h и unix.h в один ENet_Platform.pas, разделив там код ifdef'ами. Потому что ввиду некоторой избыточности синтаксиса Паскаля (вообще языка, не только FPC) и особенностей его работы с модулями будет намного проще и лаконичнее в каждом использующем ENet_Platform.pas модуле в uses написать лишь

Код: Выделить всё
uses
   ..., ENet_Platform, ...;

чем нечто вроде такого:

Код: Выделить всё
uses
   ..., {$IFDEF MSWINDOWS} ENet_Win32 {$ELSE} ENet_Unix {$ENDIF}, ...;
Аватара пользователя
Black Doomer
незнакомец
 
Сообщения: 3
Зарегистрирован: 25.02.2015 14:39:13
Откуда: Vladivostok, Russia

Re: ENet - Сетевая UDP-библиотека с гарантией доставки

Сообщение Zhbr » 26.02.2015 08:45:11

Спасибо. Будем пользовать)
Zhbr
новенький
 
Сообщения: 44
Зарегистрирован: 31.01.2014 02:34:21

Re: ENet - Сетевая UDP-библиотека с гарантией доставки

Сообщение Black Doomer » 26.02.2015 09:18:26

Zhbr писал(а):Спасибо. Будем пользовать)

На здоровье.) А если и ещё покажешь кому, то вообще благодарен сильно буду.)
Аватара пользователя
Black Doomer
незнакомец
 
Сообщения: 3
Зарегистрирован: 25.02.2015 14:39:13
Откуда: Vladivostok, Russia

Re: ENet - Сетевая UDP-библиотека с гарантией доставки

Сообщение nix » 14.10.2018 10:34:30

Вынужден поднять старую тему по необходимости использовать библиотеку enet в Delphi XE: подключение модулей (предоставленных Black Doomer'ом) и вызов функции "enet_initialize()" приводят к ошибке "system exception" при старте программы (программа вылетает), независимо от того, в каком месте вызывается эта функция. Если у кого-либо есть опыт запуска этой библиотеки на новых версиях Delphi, прошу поделиться.
nix
незнакомец
 
Сообщения: 7
Зарегистрирован: 14.10.2018 10:28:53

Re: ENet - Сетевая UDP-библиотека с гарантией доставки

Сообщение Ichthyander » 16.10.2018 14:19:11

nix, я думаю, правильнее всего задать вопрос автору на гитхабе https://github.com/cher-nov/enet-fpc/issues Вполне возможно, что он тут не появляется. Всего 3 сообщения у Black Doomer и все они в этом топике
Аватара пользователя
Ichthyander
энтузиаст
 
Сообщения: 668
Зарегистрирован: 04.04.2007 08:32:43
Откуда: Астрахань

Re: ENet - Сетевая UDP-библиотека с гарантией доставки

Сообщение Снег Север » 17.10.2018 09:33:36

nix писал(а):Если у кого-либо есть опыт запуска этой библиотеки на новых версиях Delphi, прошу поделиться.
Опыта конкретно с этой библиотекой нет, но есть опыт адаптации других и проблема в 99% случаев решается заменой в коде string на ansistring и для символов аналогично.
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 2993
Зарегистрирован: 27.11.2007 16:14:47

Re: ENet - Сетевая UDP-библиотека с гарантией доставки

Сообщение nix » 18.10.2018 09:21:38

Спасибо. Также, вот еще, что подсказали на другом форуме: https://github.com/BeRo1985/pasenet (pasENet), вроде как, порт ENet на Delphi. В данный момент изучаю, проблем пока не обнаружено.
nix
незнакомец
 
Сообщения: 7
Зарегистрирован: 14.10.2018 10:28:53

Re: ENet - Сетевая UDP-библиотека с гарантией доставки

Сообщение olegy123 » 18.10.2018 11:21:49

Снег Север писал(а):Опыта конкретно с этой библиотекой нет, но есть опыт адаптации других и проблема в 99% случаев решается заменой в коде string на ansistring и для символов аналогично.
там линкуется сишная либла..

Дня два назад разбирался почему Qt кладет Ubuntu намертво.. при этом 14.04.5 работает норм, а в 14.04 - кирпич. Как оказалось stdc++ не то.
olegy123
долгожитель
 
Сообщения: 1643
Зарегистрирован: 25.02.2016 12:10:20

Re: ENet - Сетевая UDP-библиотека с гарантией доставки

Сообщение Снег Север » 19.10.2018 12:40:07

olegy123, у топикстартера делфи ХЕ, так что линуксопроблемы ни при чем.
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 2993
Зарегистрирован: 27.11.2007 16:14:47

Re: ENet - Сетевая UDP-библиотека с гарантией доставки

Сообщение Kopa » 22.11.2023 12:53:48

Автор топика оставил сообщении по поиску ранних версий игры на old-dos.ru

P.S. Проверил запуск игры под Linux32
Под Linux игра запускается, но у меня (Puppy32 Linux Xenial)
потребовалось добавить библиотеки libenet7, libmpg123, libopusfile0, libxmp
Kopa
новенький
 
Сообщения: 41
Зарегистрирован: 29.10.2020 12:24:36


Вернуться в Сети

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6

Рейтинг@Mail.ru