Демон на php или на чем то еще

varan

Б̈́̈̽ͮͣ̈Л̩̲̮̻̤̹͓ДͦЖ̯̙̭̥̑͆А͇̠̱͓͇̾ͨД͙͈̰̳͈͛ͅ
Демон на php или на чем то еще

Наш клиент посылает запросы нашему серверу, не по http, а напрямую, по определенному порту засылает xml и получает в ответ xml.

Теперь нам понадобилась некая прослойка, которая бы, получив запрос, обращалась или к одному серверу или к другому, в зависимости от неких правил. Клиент на своей стороне ничего поменять не может (там всё сложно).

Как это реализовать? Реально ли сделать надежный многопоточный php демон? Может, есть какие-то другие технологии, чтобы это сделать?
 

pilot911

Новичок
в бизнес-процессах есть такая идея, которая сокращенно называется ESB (Enterprise Service Bus) - там все основано на преобразовании входящих запросов по условиям и на системе сообщений, с помощью которых работают сервисы

может быть, эта идея - то, что надо ?

http://www.itpedia.ru/index.php/ESB
 

fixxxer

К.О.
Партнер клуба
Ну можно и префорк сделать и FSM на либевенте. Только мне кажется что проще не на php
 

varan

Б̈́̈̽ͮͣ̈Л̩̲̮̻̤̹͓ДͦЖ̯̙̭̥̑͆А͇̠̱͓͇̾ͨД͙͈̰̳͈͛ͅ
а на чем проще?
 

Sherman

Mephi
2varan

Смотря что за демон, какая нужна производительность, протоколы, нужно ли балансировать реквест между несколькими инстансами и так далее.

Я бы выбирал между java(какой-то из framework для сетевых серверов), boost ASIO(c++) и erlang. Первые две технологии я пробовал использовать таким образом и они отлично работают, а erlang просто любопытно посмотреть.
 

Long

Новичок
а я бы пришел на devconf и послушал про демонов на php :)
 

Alexandre

PHPПенсионер
Смотря что за демон, какая нужна производительность, протоколы ...
нужно отталкиваться от этого
мне кажется, что если нагрузка не большая, то лучше на рнр (libevent) иначе на сях (опять тот же libevent).
 

флоппик

promotor fidei
Команда форума
Партнер клуба
Я просто лох. У меня написанный на пхп демон собирает данные с ГПС-приемников. И ниче, месяцами работает, форкается, никуда не падает, и каждый процесс от силы килобайт 300 кушает... :) Что я делаю не так?
 

dr-sm

Новичок
у меня тож демон на сях++, собирает данные с гпс приемников,
правда не форкается, один воркер и как сожрал два месяца назад 9мб, так и живет. мультиплексоры и либевент рулят все-таки.
могбы конечн и на пхп его написать, но системное програмное обеспечение как-то боязно...

-~{}~ 11.05.10 02:00:

да и парсить бинарный протокол на пхп как-то подташнивает.
 

флоппик

promotor fidei
Команда форума
Партнер клуба
да и парсить бинарный протокол на пхп как-то подташнивает.
я конечно не знаю, что у тебя за приемники, но мои стандартные GPRMC строки шлют. Поэтому ничего "бинарного" мне парсить не пришлось.
могбы конечн и на пхп его написать, но системное програмное обеспечение как-то боязно...
Я тоже так считал. Раньше.
да вот в этом и суть была. Я хотел на пхп сделать быстрый прототип, что бы можно было работать, а потом переписать на что нить более "системное", как ты говоришь. Да только вот за время тестов демон себя так хорошо показал, что я не увидел смысла переписывать то, что прекрасно работает.
Думаю, просто времена прошли, и пхп в консольном режиме вполне уже можно доверять.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
>парсить бинарный протокол на пхп как-то подташнивает
а меня нет
например, XOR двух строк рулит :)
 

Sherman

Mephi
>Я хотел на пхп сделать быстрый прототип

С использованием framework типа boost asio или grizzly - это реально сделать и на c++/java, соответсвенно.

Проблема с php враппером для libevent - это то, что вы ограничены схемой 1-поточный демон и интерфейс к libevent выглядит просто ужасно(низкоуровневые подробности).
 

fixxxer

К.О.
Партнер клуба
Ну интерфейс там родной =))

Вообще конечно никто не мешает написать нормальный враппер вокруг; проблема с однопоточностью тоже вполне решаема по классической схеме master-workers, в pcntl/posix все для ее реализации есть. Если заморочиться, вполне можно написать мини-фреймворк для написания такого рода демонов. Может, кто-то уже это и сделал.

Но смысл я в этом вижу только если есть необходимость реюза уже написанного php-кода (да и то в рамках FSM все очень ограничено).
 

флоппик

promotor fidei
Команда форума
Партнер клуба
. Если заморочиться, вполне можно написать мини-фреймворк для написания такого рода демонов. Может, кто-то уже это и сделал.
Да, когда искал, видел такие. Правда для меня они были излишне сложные.
проблема с однопоточностью тоже вполне решаема по классической схеме master-workers, в pcntl/posix все для ее реализации есть
Да, там это делается 4 строчками, как ни странно :)
С использованием framework типа boost asio или grizzly - это реально сделать и на c++/java, соответсвенно.
для этого надо _регулярно_ писать на яве/сях, а я преимущественно пхп-программист.
Я лишь рассказал, что я сделал, и почему. Число вариантов которые "можно было бы сделать" стремится к бесконечности. Я поделился своим опытом, и мне хочется ожидать этого от других, а не слушать, что это можно было бы сделать на другом языке.
 

fixxxer

К.О.
Партнер клуба
ой, вот только не надо это )

-~{}~ 11.05.10 18:05:

>>Да, там это делается 4 строчками, как ни странно
ну, нормальный master-worker с префорком и socketpair между - немного больше строк ;) если форкаться на каждое соединение то 4, но это ж ваще жопа
 

флоппик

promotor fidei
Команда форума
Партнер клуба
ну, нормальный master-worker с префорком и socketpair между - немного больше строк
а я между не держу. мастер только инициирует соединение, форкает воркера, запоминает пид, что бы контролировать случаи, когда клиентский сокет дохнет внезапно(ибо там гиганский системный таймаут, и выгодней зафорсить смерть, чем ждать)и забывает о нем. А воркер обслуживает подключившийся девайс потихонечку.
 

fixxxer

К.О.
Партнер клуба
а как распределять между несколькими воркерами? мы ж тут с утилизации нескольких ядер начали про это, вроде как )
 
Сверху