Олег Абражаев: я бы в этом случае взял rabbitmq и настроил несколько очередей, по одному воркеру на кажую апишку, потом можно спокойно разнести их по сервакам и т.д.
Михаил Баженов: вы не угадаете чем я занят в данную секунду. На самом деле reactphp + libev достаточно шустро работают а для надежности все websocket соединения сначала обрабатывает nginx.
yanchumak: ух, вот тут походу придется самому формировать пакеты и заварачивать их в дейтаграммы...
По сути у вас эдакий програмный маршрутизатор выходит... Может в эту сторону смотреть? Ну мол... если у нас IP трафик просто нужно отправлять то может стоит просто форвардить его и отправлять назад что с другой оконечной точки пришло? Я просто не подумал что на приложеньку тоже слать что-то надо.
yanchumak: ну так что ж вы... То есть если упростить, у вас есть приложение которое ловит трафик в файловый дискриптер и вам нужно перепослать его на другой эндпоинт. Эдакий прокси.
Перепослать пакет вы можете при помощи raw сокетов. То есть берем IP датаграмму, выковыривае из нее TCP пакет, достаем из заголовков IP адрес адресата и из TCP пакета порт, коннектимся (на той стороне должны же слушать порт) и затем отправляем даные из TCP пакета. Только их. Вот и все. Соединения можно хранить в какой хэш-мэпе.
С UDP такая же история только не нужно даже соединения хранить... бо их нет.
Разруливать что у нас внутри можно по заголовкам.
Если все же хотите приключений можно создать raw сокет и отправлять через них все.
KoMPoTuK: статей правильных подходов для Yii вы не найдете, их нет. Во всяком случае больше чем в документации и кукбуке. Есть кника Александр Макаров а и т.д. в которых может быть что-то можно подчерпнуть, но в целом же "хорошо" писать не зависит от фреймворка.
Проблема в том что все что "хорошо" не новинка, это появилось лет 20 назад и с тех пор народ все чаще это дело забывает и все больше "ебашит контроллеры". А зная PHP и ООП (то есть на уровне понимания что вам дает инкапсуляция к примеру, или что дает слабая связанность) уже можно писать на Yii что-то нормально.
А если у вас проблемы со структурой проекта... чтож... тогда вам все же стоит посмотреть повнимательнее чем advanced отличается от basic и сделать свои выводы.
yanchumak: я к тому что в пакете который внутри должен быть прописан порт или что-то в этом духе.. у протокола который используется приложением должен быть свой формат заголовков как я понимаю... и что в нем... и тд.
Вообще чем приложение занимается?
В целом адрес целевой можно из IP пакета достать, просто вопрос куда что слать то. Вы знаете на какой порт? Порт указывается в TCP пакете который уже заварачивается в IP пакет. Так что тут больше нужно смотреть на то что же внутри у этих IP датаграмм и что они по итогу шлют.
yanchumak: любопытства ради, а что внутри IP датаграммы то? Сомневаюсь просто что там просто данные какие-то... может быть там уже есть внутри сформированный TCP пакет?
yanchumak: да, по поводу ICMP это я сморозил конечно.
Перепаковка - зависит от того что вы имеете. С UDP итого проще. Вы из IP пакета все можете вытащить из заголовков. А с TCP у вас соединение должно быть. Ну либо вы опять же вытаскиваете из заголовков к кому подключаться а дальше по старинке через сокеты.
Далее достаем из дэйтаграмм данные и пишем их в сокет в цикле.
Олег Абражаев: оно не лучше, оно проще. Если у вас все воркеры на одном сервере и нужно что-то простенькое просто распаралелить нет смысла подключать тяжелую арлтелерию. В контексте задачи быть может и не нужно вообще ничего, один процесс воркер. никаких гонок у нас нету... даже лочить ничего не нужно по идее.
А можно не страдать фигней а воспользоваться менеджерем очередей, я привел одно из таких решений. Очередь хранится в reddis, блокировки и прочее хэндлит оно, вы просто забираете из очереди очередное сообщение/таск и обрабатываете.
Quber: воровать исходники глупо. Либо засудят либо проект будет запущен один в один и позже. А если это один разработчик vs компания то денег на маркетинг понятно у кого будет больше.
Quber: ну тогда просто забейте, разработчик может не иметь исходников но у него будет опыт работы над проектом и скорее всего сделаю его лучше чем он был изначально так как у меня уже будет в голове все те проблемы с которыми пришлось столкнуться.