@dlangru

Страница 395 из 719
Oleg
02.02.2018
15:30:45
https://github.com/blahness/nes_test

Тестовое приложение для эмулятора nes

В readme ссылка есть на сам эмулятор

Всё на D

Google
Evgeny
02.02.2018
15:53:11
Я вообще хз о чем ты рассуждаешь ) В моем ПР есть фикс баги, вполне полноценный. Два чувака уже подтвердили что это хороший фикс. О каких клиентах и серверах ты говоришь я не понимаю.
Он говорит вот о чем. В вайбде есть функция read, которой даешь размер который тебе НУЖНО прочитать, и она блокирует таск пока все эти байты не будут прочитаны или возникнет ошибка. Но так как ты не знаешь сколько тебе нужно читать, то нужно заключить соглашение с тем кто отправляет тебе данные. Например сначала отправляется short с длиной пакета, а потом уже сам пакет. ты сначала читаешь с помощью read этот short (2 байта), а затем при помощи того же read сам пакет длина которого тебе уже известна

Pavel
02.02.2018
15:53:48
Да нету у меня никаких пакетов, есть только TCP поток

Мне надо между двумя tcp соединениями в обе стороны передавать все данные, и делать это быстро

Evgeny
02.02.2018
15:54:13
Минус только в том, что нужно заключать соглашение с отправителем, что не всегда возможно. Например чтение данных из стороннего источника

Да нету у меня никаких пакетов, есть только TCP поток
Да, если ето просто стриминг медиаданных, то длина тоже заранее не известна

можно бить на куски и кусками слать с указанием длины, но это бессмысленная трата трафика в случает стриминга

Pavel
02.02.2018
15:55:45
Я должен сразу отослать буфер который мне пришел

Чтобы никого не задерживать.

Evgeny
02.02.2018
15:57:01
Я должен сразу отослать буфер который мне пришел
я просто разъяснил, что он имел в виду

Pavel
02.02.2018
15:57:23
лучше разъясни ему что я имею в виду )

Evgeny
02.02.2018
15:57:30
Часто бывает, когда пакет можно нормально распарсить только в том случае если он скачался целиком

в этом случае вполне логично слать длину и ждать пока пакет целиком не загрузится

Pavel
02.02.2018
15:58:01
Ну в начале у меня идет socks5 аутентификация, там в первом байте приходит длина пакета, яв се это парсю, это вообще не проблема.

Google
Evgeny
02.02.2018
15:58:26
лучше разъясни ему что я имею в виду )
ну у тебя просто стриминг данных или какая-нибудь прокся?

Pavel
02.02.2018
15:58:38
Прокся

Evgeny
02.02.2018
15:58:43
а ну да, сокс

Pavel
02.02.2018
15:59:05
И перед стриммингом сначала идет процесс аутентификации, а потом просто два сокета тупо как труба один в другой

Evgeny
02.02.2018
15:59:09
тогда я бы тоже делал без длин откуда соксу их знать

Pavel
02.02.2018
16:00:05
В общем мне все нравится, только я нашел скрытопроблему - примерно через час работы прокся начинает отжирать 100% проца и намертво зависает. Как это расследовать я не представляю.

Видимо там в вайбе какой-то шарик за ролик забегает

Evgeny
02.02.2018
16:00:44
Видимо там в вайбе какой-то шарик за ролик забегает
да, у меня точно также иногда ложится веб-сервак

Pavel
02.02.2018
16:00:53
Блин хреново

Evgeny
02.02.2018
16:01:07
100% цпу и никакие запросы не обрабатываются

рестарт помогает

Pavel
02.02.2018
16:01:42
А у тебя vibe-core или стабильный vibe.d ?

Драйвера пробовал менять?

Evgeny
02.02.2018
16:02:10
у меня 0.7.x последний

либевент

драйвера не меняю, потому что это бывает относительно редко

Pavel
02.02.2018
16:03:01
Ладно буду выслеживать, может как-то gdb подрубиться или я хз

Evgeny
02.02.2018
16:03:05
я все равно все накуй на эликсир/эрланг переписываю,

у меня подобная херь кстати когда-то на руби была, sinatra зависала похожим образом

может это что-то на уровне ОС происходит, хз

Google
Pavel
02.02.2018
16:05:01
Надо идти в чат к реверсерам и спрашивать

Evgeny
02.02.2018
16:05:27
а у тебя виснет только с одним паралелльным соединением?

Pavel
02.02.2018
16:08:08
Один поток, но соединений много

При активном бровзинге прокся где-то 3-4 соединения в секунду может открыть, с паузами

А потом на минуту замолчать и использовать их.

Evgeny
02.02.2018
16:09:11
пул соединений?

Pavel
02.02.2018
16:09:36
Не, это уже как там вайб делает, мне все равно

В мой код приходит TCPConnection и я начинаю с ней работать.

Evgeny
02.02.2018
16:09:59
а драйвер какой?

event-core?

Pavel
02.02.2018
16:10:10
Да, все стандартное

там reactor кажется

Pavel
02.02.2018
16:10:28
Или proactor?...

Evgeny
02.02.2018
16:10:34
стандарнтый eventcore вроде

reactor.proactor - это просто названия шаблонов

Pavel
02.02.2018
16:11:09
Ну в честь них и драйвера называют )

Evgeny
02.02.2018
16:11:11
попробуй на libevent или даже libasync

Pavel
02.02.2018
16:11:28
libevent попробую, а libasync вроде пока не поддерживается

Evgeny
02.02.2018
16:11:29
либевент выпилен

Google
Evgeny
02.02.2018
16:13:02
https://code.dlang.org/packages/eventcore

eventcore - это просто эвент луп

только какие-то стандартные нативные драйвера поддерживаются

другой вариант откатиться на 0.7.x

Admin
ERROR: S client not available

Evgeny
02.02.2018
16:15:17
чисто пробы ради

Igor
02.02.2018
16:19:46
Часто бывает, когда пакет можно нормально распарсить только в том случае если он скачался целиком
имхо - читать нужно всегда сколько можно прочесть, просто что-бы экономить сисколлы. А потом уже ковыряться в том сколько байт было в заголовке и скоько их еще нужно дочитать. Другое дело кто именно реализует эту “буферизацию” - может и библиотека, а может и пользовательский код. Но говорить - ты можешь прочесть один байт - это как-то очень мелко.

Pavel
02.02.2018
16:20:51
А еще подлее - это говорить что ты можешь прочитать 4096 раз по одному байту :D

Igor
02.02.2018
16:21:50
да, недостойно высокого звания

Pavel
02.02.2018
16:25:13
В опенсорс софте все места узкие )

Не бывает широких мест, бывают не достаточно извращенные пользователи.

Igor
02.02.2018
16:27:52
экономить сисколлы тоже мелко. будет у тебя скажем в два раза больше сисколов вряд ли это будет узким местом
Это уже как повезет. Вон прокси кроме сисколлов ничего не делает практически. Заранее неизвестно какое приложение будет использовать либу

Pavel
02.02.2018
16:28:42
Если смотреть видос 4к на ютюбе, то оно все же ест 5-6% ядра, что заметно

Я вот думаю, если из TCPConnection не копировать в свой буфер, а писать по ссылке из временного буфера TCPConnection, то должно быть еще эффективнее

Evgeny
02.02.2018
16:29:23
в целом согласен, когда я пилил сервер для сетевой игры, я тоже тащил по маасимуму во внутренний буфер и потом уже бил на игровые пакеты.

Pavel
02.02.2018
16:30:08
Ведь в буфер TCPConnection в юзерспейс опять копируется буфер из ядра сетевого стека..

Представляете в каком неэффективном бессмысленном мире мы живем?? Мириады бесполезных копирований, чтения по 1 байту в цикле...

Igor
02.02.2018
16:34:20
Да, есть такая тема, кажется zero copy tcp

Evgeny
02.02.2018
16:36:50
Это уже как повезет. Вон прокси кроме сисколлов ничего не делает практически. Заранее неизвестно какое приложение будет использовать либу
сисколлы они разные бывают. мы тут только сискол запрашивающий данные из буфера сокета рассматриваем, он ничего практически не жрет.

Google
Igor
02.02.2018
16:37:20
Evgeny
02.02.2018
16:38:50
я не уверен, что это вообще сисколл

Pavel
02.02.2018
16:41:19
А зачем копировать в юзерспейсе вообще? Прочел в immutable буфер и работаешь с ним
Ну это становится все более низкоуровнево и более хрупко, если увлечься

Igor
02.02.2018
16:41:47
Ну это становится все более низкоуровнево и более хрупко, если увлечься
Конечно это дело библиотеки, она должна давать инструмент

Pavel
02.02.2018
16:43:58
Вообще если покопаться в вайбе то там конечно не идеально

При парсинге запроса парсер туда сюда скачет, разбивает строки, копирует во временные параметры кучу раз

То есть это не уровень си/си++

Evgeny
02.02.2018
16:45:39
Из socket? Конечно.
ты уверен, что буфер сокета лежит не в юзер спейсе?

Pavel
02.02.2018
16:47:41
а язык тут причем?
Ну вот на си никогда ни за что не будут копировать что-то куда-то просто так) Займутся байтодрочерством

Pavel
02.02.2018
16:48:51
Ну да, это неидеально

Evgeny
02.02.2018
16:48:58
не стоит оно того вообще

Страница 395 из 719