
Oleg
02.02.2018
15:30:45
https://github.com/blahness/nes_test
Тестовое приложение для эмулятора nes
В readme ссылка есть на сам эмулятор
Всё на D

Google

Evgeny
02.02.2018
15:53:11

Pavel
02.02.2018
15:53:48
Да нету у меня никаких пакетов, есть только TCP поток
Мне надо между двумя tcp соединениями в обе стороны передавать все данные, и делать это быстро

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

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
да, недостойно высокого звания

Evgeny
02.02.2018
16:24:38

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:17

Igor
02.02.2018
16:38:30

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

Pavel
02.02.2018
16:41:19

Igor
02.02.2018
16:41:47

Pavel
02.02.2018
16:43:58
Вообще если покопаться в вайбе то там конечно не идеально
При парсинге запроса парсер туда сюда скачет, разбивает строки, копирует во временные параметры кучу раз
То есть это не уровень си/си++

Evgeny
02.02.2018
16:45:39

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

Evgeny
02.02.2018
16:48:36

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

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

Igor
02.02.2018
16:50:41