2013-08-30 165 views
1

我想在PHP中實現客戶端套接字。循環迭代中的PHP套接字客戶端

套接字類型是TCP/IP並運行一個全雙工通道。 客戶端必須每秒向服務器發送請求,因此它必須循環運行。

我是否必須重新創建並連接到每個請求的套接字? 或者是更好地創建並連接到外部的套接字然後管理通信?

<?php 
    while (true) { 
     //management of the pid here 
     //create the socket 
   $socket = socket_create (AF_INET, SOCK_STREAM, 0); 
     //send the request 
   $sent = socket_write ($socket, <query>, <length>); 
     //get the answer 
     $response = socket_read ($socket, 1024); 
     //close the socket 
     socket_shutdown ($socket, 2); 
     usleep (500);//wait remote host 
     socket_close ($socket); 
     sleep (1); 
    } 
?> 

我已經在循環之外實現了套接字連接和內部的請求管理。

但連接保持活動狀態幾分鐘,然後在端點連接上返回錯誤。

在這種情況下是否需要使用socket_bind?

謝謝。

回答

0

您應該在循環外部連接一次套接字,然後將其用於整個應用程序會話。循環結束時斷開插座。

+0

問題是循環必須始終保持活動狀態。我必須爲持久連接使用特定的選項(在端點返回錯誤後)。什麼是處理重新連接的最佳方式? 謝謝 – user2731902

+0

如果出現錯誤,請退出循環,重新連接並返回循環。 – Barmar

+0

我正在實現一個客戶端: 套接字必須使用選項socket_bind創建? 非常感謝你 – user2731902

0

創建一個套接字消耗了大量的資源,並且由於您沒有連接到多個點,您應該在循環外部創建套接字。