Мне нужен скрипт / приложение, чтобы сохранить TCP-соединения для интерфейса PHP - PullRequest
3 голосов
/ 16 сентября 2010

Я создаю PHP-интерфейс для внутреннего сервера, используя пользовательский протокол по TCP.Из-за довольно сложного рукопожатия при установлении соединений с внутренним сервером я хотел бы сохранить TCP-соединения с внутренним сервером.Естественно, учитывая природу HTTP без учета состояния (и особенно при использовании mod_php под Apache), я не могу сделать это напрямую в PHP.

Я думал о наличии локального «прокси-сервера», поддерживающего пулподключения к бэкэнд-серверу.Важно, чтобы каждый пользователь внешнего интерфейса PHP поддерживал свое собственное соединение с внутренним сервером.Теперь, это не очень сложная программа, но из-за множества ловушек сетевого программирования, я бы предпочел использовать надежное, зрелое приложение, которое могло бы делать подобные вещи.

Я думаю что-то вродеприложение PHP, подключающееся к прокси-серверу, сообщает «У меня есть ID; 123», и с этого момента весь контент на сервер и с него передается напрямую между внешним интерфейсом PHP и внутренним сервером.

Любые предложенияна элегантные решения для этого?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 16 сентября 2010

Вот идея, хотя она может не очень хорошо масштабироваться:

Основная идея заключается в том, что вы хотите каким-то образом прокси подключать эти необработанные соединения сокетов, когда соединение с бэкэнд-системой сохраняется.

Итак, представьте, что у вас есть программа, которая создает удаленное соединение с вашей серверной системой, а затем создает сокет домена (fifo) в каком-то специальном каталоге на сервере переднего плана и называет этот сокет домена после session_id пользователя. Этот процесс просто передает данные между двумя соединениями.

Я не совсем уверен, как бы я разработал такой прокси. Возможно, вы могли бы написать демон на PHP, который мог бы справиться с этим (подсказка: вы могли бы взглянуть на некоторые фреймворки для демонов php, такие как nanoserv или System_Deamon) - вряд ли они будут очень эффективными - но могут работать нормально. Если у вас очень много соединений, вы можете использовать что-то с многопоточностью, чтобы избежать fork () для каждого соединения.

Но основная идея заключается в том, что для каждого открытого соединения с серверной системой существует некоторый процесс, который предоставляет сокет локального домена, с которым могут взаимодействовать ваши интерфейсные PHP-скрипты. Эти интерфейсные процессы, связанные с веб-интерфейсом, знают , который сокет, потому что он назван в честь текущего session_id.

Как и когда вы настраиваете / разрываете эти соединения, вероятно, очень зависит от ваших обстоятельств. Вам нужен какой-то способ для связанных с сетью процессов запрашивать сокет (в этот момент прокси-демон выполняет настройку / рукопожатие, открывает сокет локального домена и начинает прокси) и некоторая стратегия для их закрытия.

0 голосов
/ 16 сентября 2010

Все, что вам нужно для установления и поддержки низкоуровневых TCP-соединений и коммуникаций:

http://php.net/manual/en/book.sockets.php

Для постоянных соединений:

http://www.php.net/manual/en/function.pfsockopen.php

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...