OberonCore https://forum.oberoncore.ru/ |
|
Сетевые особенности Linux версий ББ, тестируем O3 https://forum.oberoncore.ru/viewtopic.php?f=34&t=6915 |
Страница 1 из 1 |
Автор: | arisu [ Пятница, 10 Март, 2023 17:15 ] |
Заголовок сообщения: | Сетевые особенности Linux версий ББ, тестируем O3 |
по ходу, запустил O3 на пинусах. порт заключался в том, что я скопипастил нужный код из HostTCP/Lin в O3bbHostNet, вместо баз данных воткнул виндозаголовок ODBC с поправленым именем библиотеки (всё равно примеры базы не используют), а реестр и процессы просто выкинул нафиг. примеры, опять же, этим не пользуются. а, и в Debug-модуле от O3 поправил по лекалам DevDebug. всё работает за одним маленьким исключением: начальная страница отчего-то грузится бесконечно, надо нажать «стоп» чтобы она появилась. с остальными страницами такого не наблюдается. кстати, о портабельности: всё это заняло неспешные тридцать минут. да, пол-часа. остальное Просто Заработало. в отдельную тему не надо, пожалуйста: это просто эксперимент, там наверняка намного больше чинить надо (как минимум главную страницу). ну, и документацию к O3 ребята забыли дать, это печально. надо самим писать. p.s.: баг с бесконечной загрузкой присутствует и в виндоверсии, так что это не пинус-специфичное. |
Автор: | arisu [ Пятница, 10 Март, 2023 19:03 ] |
Заголовок сообщения: | Re: BlackBox 2.0 |
по ходу, как минимум в HostTCP/Lin баг: неправильно выставляется non-blocking для сокетов, поэтому читалка тупо уходит в блок. я у себя заодно переделал на линукс-специфичные вызовы, без ioctl. в итоге ни BB, ни браузер больше не блочатся, но… есть другая проблема: O3 не детектит ситуацию "connection closed by peer", и крутит пустой recv пока не случится таймаут. я не очень понял, специфика ли это неблокирующих сокетов, или я/O3 таки что-то делают не так. а, отбой тревоги: это PaleMoon держит сокет на всякий случай. если пойти через telnet, то всё корректно, закрытие ловится как надо. а-а-а, всё ещё смешнее! ребята зачем-то HTTP/1.1 сделали по спекам, а не как все остальные. при HTTP/1.0 O3 сразу после первого запроса сокет закрывает, а при 1.1 — держит открытым. насколько помню, по спекам-то это вроде бы правильно, а на деле… ну, так поступают далеко не все. |
Автор: | arisu [ Пятница, 10 Март, 2023 20:09 ] |
Заголовок сообщения: | Re: Сетевые особенности Linux версий ББ, тестируем O3 |
эх. я вообще не собирался с O3 играться, оно как-то само вышло… простите, что пришлось тему отделять. собирался бы — завёл бы сам. ну, оно работает, тестовое приложение прямо как настоящее. ещё базы данных бы с прямой работы с ODBC перетащить на Sql с его драйверами — но я пока (кажется) к такому подвигу не готов. рабочий вариант залит в репозиторий Lament Configuration. учтите, что для сборки под обычным BB надо поубирать везде `IN ComponentPascal` после `MODULE`. Ultra Pascal не совсем с CP совместим, поэтому для LC нужен такой вот флаг. ;-) |
Автор: | Иван Денисов [ Пятница, 10 Март, 2023 23:12 ] |
Заголовок сообщения: | Re: BlackBox 2.0 |
arisu писал(а): по ходу, как минимум в HostTCP/Lin баг: неправильно выставляется non-blocking для сокетов, поэтому читалка тупо уходит в блок. я у себя заодно переделал на линукс-специфичные вызовы, без ioctl. в итоге ни BB, ни браузер больше не блочатся, но… есть другая проблема: O3 не детектит ситуацию "connection closed by peer", и крутит пустой recv пока не случится таймаут. я не очень понял, специфика ли это неблокирующих сокетов, или я/O3 таки что-то делают не так. Это интересно, сайт вот: https://oberon.org/ на текущей реализации CommTCP крутится, и мне не нравится, что приходится его периодически перезапускать. Браузер он не держит, но почему-то иногда сервер падает, может быть у меня какой-то алгоритм с утечкой, я думал, поэтому сервер каждую ночь по крону перезапускаю на всякий случай, и так уже давно работает стабильно. Там ещё не было трасировки падения в консоль. Надо бы презапустить на последнем Блэкбоксе 2.0, может картина прояснится. А также может быть ваши правки могут это дело исправить, и не придётся перезапускать. Стоит попробовать как-нибудь. Исходники выложу также. |
Автор: | arisu [ Суббота, 11 Март, 2023 00:24 ] |
Заголовок сообщения: | Re: Сетевые особенности Linux версий ББ, тестируем O3 |
ну, в принципе если вы не реализуете там HTTP/1.1 с keep-alive по-умолчанию, то мои правки могут и не дать эффекта (тем более если падения — я там ничего про падения не правил). в O3 проблема была в том, что он ожидал дальнейших запросов в keep-alive сокет, а их не было. и `recv()` уходил в блок. а пока нормальный обмен шёл — то блока не случалось. если правильно писать код и не делать keep-alive — то и не удивительно, что можно не заметить. и хочу сразу предупредить, что обработку неблокирующего `connect()` я писал по докам, но вслепую, на предмет работоспособности не проверял. для сервера, впрочем, это неважно. |
Автор: | arisu [ Суббота, 11 Март, 2023 00:30 ] |
Заголовок сообщения: | Re: Сетевые особенности Linux версий ББ, тестируем O3 |
вообще, жаль, что O3 не умеет в SSL/TLS. правда, писать реализацию этой фигни — лопнуть можно, и вовсе не потому что шифров нет. я может потом попробую пересадить O3 на GnuTLS (потому что у GnuTLS намного более адекватный апи, чем у этой, как её… ну, которая дырявая постоянно). вообще, TLS, конечно, гуано адское, но там есть одна интересная штука: авторизация по сертификату. то есть, при соединении с сервером можно серверу передать сформированый специально для него сертификат — и опа! никаких паролей не надо. но почти никто почему-то не использует. а жаль, это единственное, ради чего вообще имеет смысл пытаться делать TLS. |
Автор: | Иван Денисов [ Суббота, 11 Март, 2023 00:39 ] |
Заголовок сообщения: | Re: Сетевые особенности Linux версий ББ, тестируем O3 |
arisu писал(а): вообще, жаль, что O3 не умеет в SSL/TLS. правда, писать реализацию этой фигни — лопнуть можно, и вовсе не потому что шифров нет. я может потом попробую пересадить O3 на GnuTLS (потому что у GnuTLS намного более адекватный апи, чем у этой, как её… ну, которая дырявая постоянно). вообще, TLS, конечно, гуано адское, но там есть одна интересная штука: авторизация по сертификату. то есть, при соединении с сервером можно серверу передать сформированый специально для него сертификат — и опа! никаких паролей не надо. но почти никто почему-то не использует. а жаль, это единственное, ради чего вообще имеет смысл пытаться делать TLS. Йозеф сделал реализацию серверов, там и поддержка SSL через OpenSSL. http://www.zinnamturm.eu/downloadsDH.htm#Http Я запускал давно на Linux версии, только без SSL, там чуть заголовочный модуль надо было подправить. А остальное работало. |
Автор: | arisu [ Суббота, 11 Март, 2023 01:50 ] |
Заголовок сообщения: | Re: Сетевые особенности Linux версий ББ, тестируем O3 |
у O3 всё категорически своё, они даже части BB зачем-то дублировали у себя. ну и — добавить GnuTLS очень просто, это минут десять работы (плюс трансляция заголовков). предпочитаю именно его. openssl я не буду трогать даже километровой палкой и в костюме полной химзащиты. |
Автор: | Иван Денисов [ Суббота, 11 Март, 2023 02:21 ] |
Заголовок сообщения: | Re: Сетевые особенности Linux версий ББ, тестируем O3 |
arisu писал(а): у O3 всё категорически своё, они даже части BB зачем-то дублировали у себя. ну и — добавить GnuTLS очень просто, это минут десять работы (плюс трансляция заголовков). предпочитаю именно его. openssl я не буду трогать даже километровой палкой и в костюме полной химзащиты. из-за истории с Heartbleed? Или есть ещё причины? |
Автор: | arisu [ Суббота, 11 Март, 2023 02:28 ] |
Заголовок сообщения: | Re: Сетевые особенности Linux версий ББ, тестируем O3 |
Иван Денисов писал(а): Или есть ещё причины? из-за абсолютно упоротого API. у меня такое впечатление, что эту хреновину дизайнили специально так, чтобы правильно использовать было невозможно. сколько раз пытался — всегда какой-нибудь афедрон вылезал. GnuTLS с первого раза и будучи незнакомым вкрячил в дишечку за час, с тех пор оно несколько лет уже работает.
|
Автор: | arisu [ Воскресенье, 12 Март, 2023 01:48 ] |
Заголовок сообщения: | Re: Сетевые особенности Linux версий ББ, тестируем O3 |
поскольку я уже запилил в LC поддержку GnuTLS в режиме клиента, и допиливаю в режиме сервера — то потом портирую это же самое и в O3. только для GNU/Linux, потому что на винду мне лень. блин, какого чёрта O3 не пользуется стандартными CommStreams? у внутренних потоков O3 совершенно тот же самый API (санс маленькая разница в именах методов). нафига было переизобретать велосипед-то? надо будет пересадить O3 на стандартные потоки. |
Автор: | arisu [ Понедельник, 13 Март, 2023 03:36 ] |
Заголовок сообщения: | Re: Сетевые особенности Linux версий ББ, тестируем O3 |
пересадил O3 на CommStreams (интерфейсы не менял, просто обернул CommStreams в O3 Streams). можно было, конечно, по всему коду поменять, но зачем: обёртки работают ничем не хуже. |
Автор: | arisu [ Суббота, 18 Март, 2023 05:37 ] |
Заголовок сообщения: | Re: Сетевые особенности Linux версий ББ, тестируем O3 |
роняем O3 лёгким движением руки: отсылаем запрос со строкой в заголовках, где нет двоеточия. потрясающие парни: надо иметь воистину огромное сердце, чтобы так твёрдо верить в доброжелательность мира! страшного, конечно, ничего не происходит, всё просто трапается, но тем не менее. |
Автор: | arisu [ Суббота, 18 Март, 2023 08:32 ] |
Заголовок сообщения: | Re: Сетевые особенности Linux версий ББ, тестируем O3 |
баг с двоеточием починил (ребята одно условие забыли, и вышел классический off-by-one). заодно впилил поддержку TLS через HostTLS/Lin в LC. научил сервер иметь два listener: для обычного TCP, и для TLS. и тот, и другой опциональны. в принципе, надо бы просто завести массив listener'ов в сервере, чтобы один сервер можно было цеплять на кучу портов. p.s.: а обнаружил баг с двоеточием как раз когда полез на обычный TCP порт через https нечаянно. тут-то O3 и удивился. |
Автор: | arisu [ Среда, 22 Март, 2023 16:23 ] |
Заголовок сообщения: | Re: Сетевые особенности Linux версий ББ, тестируем O3 |
подумал, кстати: время отклика сетевых потоков на GNU/Linux можно ведь повысить. сейчас они все проверяются по таймеру — а можно иначе: добавлять в цикл проверки сообщений fd всех открытых сокетов. соответственно, как только в сокете активность (или он готов для записи) — wait_message перестаёт wait, и мы крутим actions. на самом деле надо механику чуть сложнее: сигнализировать, ожидаем ли мы чтения, и хотим ли писать. это чтобы не крутить акшоны если, например, сокет готов для записи, а писать нам сейчас туда нечего. самому O3 оно, может, и не сильно поможет, но всяким хитрым TCP-сервисам — может помочь больше. я попытался с наскоку это сделать, но ниасилил gtk. надо будет порыть в сети какой-нибудь рабочий пример. обожаю gtk: чисто «программирование через поисковик». для винды тоже это сделать можно, там есть режим, в котором сокеты посылают обычные сообщения, но я наглухо не помню, как это делать, и вспоминать как-то… в любом случае: если обкатать интерфейс, то потом портировать будет проще. |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |