Ответ оказывается тем же самым ответом, который вы использовали бы в C - fork(). Когда вы используете fork, состояние всех открытых файлов и портов сохраняется, поэтому дочерний процесс может читать порт, открытый его родителем (это то же самое, что современные веб-серверы отключают рабочие потоки для каждого подключенного клиента) это требует использования pcntl (управления технологическими процессами) модуль, который по умолчанию отключен и должен использоваться экономно, но это работает:
if($verbose)
echo "Connected Client from $remoteaddy to $localaddy\n";
echo "Forking...";
$pid = pcntl_fork(); // you're bringing children into this world, just to kill them in a few seconds. You monster.
if($pid==0){
$p = posix.getpid();
echo "PID OF CHILD: $p\n";
//in child process. Send a handshake and wait for the callback from the WebSockets library
$this->send($client, "Thank you for contacting myAwesomeServer.com! I'm slave #{$p}, and I'll be your host today");
}else if($pid>0){
$childWorkers[]=$pid;
echo "[ OK ]\n";
$this->disconnect($client->socket, false); //disconnect the clients socket from the master thread, so only the child thread is talking to the client
}else if($pid==-1){
echo "[FAIL] unable to create child worker\n";
}
ВНИМАНИЕ !! Этот подход ПРАВИЛЬНО АКАДЕМИЧЕСКИЙ, и его следует использовать только в небольших проектах «домашних животных», когда у вас недостаточно времени для изучения более подходящего языка (лично я знаю C достаточно хорошо для fork(), но у меня недостаток знаний его функций манипуляции с строкой, несомненно, оставят на сервере уязвимое отверстие безопасности). Я не уверен, как двигатель Zend делает это pcntl_fork(), но я бы себе представить, что образ памяти этого уродства будет много раз размер эквивалентного кода C ..
Возможно, вы сможете получить эту работу ... однако, вы считаете платформу, где это намного проще сделать, например, Node.js? – Brad
Да, я начинаю думать, что мне придется изменить программу на C, которую я написал давно, чтобы заставить ее работать. Я хочу сказать, что это интересный проект, который я хочу преследовать, но на данный момент у меня нет времени, чтобы ускорить работу сокетов и т. Д. На новом языке и все же в конечном итоге получить безопасное решение. – Chris