2015-05-09 210 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秒鐘才能執行。

你能向我解釋爲什麼會發生這種行爲?是否由配置參數引起?這是一個常見的websocket行爲嗎?

+0

因爲35請求存儲器開始排出後?CPU利用率達到幾乎100%,網絡輸入是最大值?就像DDos一樣。 –

+0

您可以添加有關您的PHP版本和操作系統的精度? –

+0

@Coderanonymous從我的系統監視器我看不到大cpu,內存或網絡使用 – 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獲得結果,但是我沒有使用它。啊,其實我使用棘輪作爲服務器,也許這可以幫助 – marcosh

+0

我不明白棘輪的相關問題 – anonymous

+0

棘輪使用ReactPhp服務器,它是用stream_socket_server創建的,而他們我需要創建php客戶端來連接到服務器 – marcosh