2015-05-09 2 views
1

Я пытаюсь создать набор WebSocket клиентов с помощью следующего кода:PHP - соединения сокета клиента

$server = stream_socket_server("tcp://127.0.0.1:8080"); 

for ($i = 1; $i <= 50; $i++) { 
    var_dump($i); 
    stream_socket_client("tcp://127.0.0.1:8080"); 
} 

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

Не могли бы вы объяснить мне, почему такое поведение происходит? Это вызвано параметром конфигурации? Является ли это обычным поведением в сети?

+0

потому, что после того, как 35 запрашивает память начинает изнурительную? Загрузка процессора достигает почти 100%, ввод сети является максимальным? как DDos. –

+0

Можете ли вы добавить уточнения о вашей версии php и операционной системе? –

+0

@Coderanonymous от моего системного монитора Я не вижу большого процессора, памяти или сетевого использования – marcosh

ответ

1

Рабочая гипотеза: в ожидании соединения замедляет порт

<?php 
$server = stream_socket_server("tcp://127.0.0.1:8080"); 
for ($i = 1; $i <= 50; $i++) { 
    var_dump($i); 
    stream_socket_client("tcp://127.0.0.1:8080"); 
    stream_socket_accept($server); 
} 

Дополнение:

В случае прослушивания партии является server.c (измененная не принимающих соединений). Соединения замедляются после 27% указанного отставания. http://www.linuxhowtos.org/data/6/server.c

<?php 
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); 
socket_bind($socket, "127.0.0.1", 8081); 
$backlog = 500; // less than /proc/sys/net/core/somaxconn 
socket_listen($socket, $backlog); 

for ($i = 1; $i <= 500; $i++) { 
    var_dump($i); 
    stream_socket_client("tcp://127.0.0.1:8081"); 
} 
+0

Извините, что я могу комментировать только сейчас. Кажется, что работающая гипотеза работает до тех пор, пока я не проверю, было ли соединение успешным. Если я слушаю «связанное» событие, я не получаю никаких результатов, используя stream_socket_accept, в то время как я получаю их, не используя его. Ах, на самом деле я использую Ratchet в качестве сервера, может быть, это может помочь – marcosh

+0

Я не вижу, как проблема относится к Ratchet – anonymous

+0

Ratchet использует сервер ReactPhp, созданный с помощью stream_socket_server, и им нужно создать php-клиенты для подключения к серверу – marcosh

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