2012-06-18 4 views
3

На сервере apache, использующем рабочий MPM, возможно ли открыть несколько постоянных сокетов для одного и того же TCP-адреса?Открыть многопользовательские постоянные сокеты в том же домене?

Когда я делаю следующее:

$SocketA = pfsockopen('tcp://domain.com', 80); 
$SocketB = pfsockopen('tcp://domain.com', 80); 

я получаю два независимых сокеты ресурсов, но с той же базовой связью (я могу сказать, потому что если я пишу $SocketA я могу читать удаленный ответ от $SocketB и порока Versa). Я хотел бы иметь два отдельных постоянных соединения.

Это можно сделать?

ответ

2

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

Причина: если хост, к которому вы подключаетесь, является точно таким же (хост и порт), он вернет существующее постоянное соединение, если оно существует, вместо создания нового.

PHP отслеживает постоянные соединения внутренне создания хэш-значения на основе хоста и порта (source):

spprintf(&hashkey, 0, "pfsockopen__%s:%ld", host, port); 

Поэтому, если вы используете один и тот же хост и порт для $socketB вы собираетесь получить обратно существующий подключение от $socketA. PHP сохраняет это значение хеша вместе с соединением, поэтому при следующем вызове pfsockopen он восстанавливает хэш, а затем просматривает его, если он находит его, возвращается старое соединение.

В гнезде B вы можете попробовать подключиться непосредственно к IP-адресу или перенести какое-то другое имя хоста на первое, чтобы вы, в конечном счете, получили 2 подключения к одному и тому же местоположению, но вы обманываете PHP для создания двух соединений. Это оба обходные пути, хотя они и не совсем переносимы.

По большей части ответ да и нет, вы не можете использовать один и тот же хост и порт для получения двух соединений, но вы можете обойти его, используя трюк, который может запутать или вызвать непредвиденные проблемы.

+0

Спасибо за ваш ответ. Я попробовал это, и 'host' - это IP-адрес (а не доменное имя). Различные порты сделали бы трюк. – thwd

Смежные вопросы