如果你是一個 PHP 開發者,你一定會經常使用 AJAX 數據輪詢與服務器交互,但這種方式非常低效并且會給服務器帶來不少壓力。所有這個時候, WebSocket 就應運而生了。
WebSocket 是一種 HTML5 的新協議,能夠在客戶端和服務器之間實現全雙工通信,它的出現使得實時性交互變得極其方便。
下面我們來介紹一下如何使用 PHP 主動發起 WebSocket 連接:
$host = 'websocket.example.com'; $port = 443; $target = 'ws://'.$host.':'.$port; $context = stream_context_create(); $socket = stream_socket_client($target, $errno, $errstr, 60, STREAM_CLIENT_CONNECT, $context); if($socket) { fwrite($socket, "Hello WebSocket!"); // 向服務器發送一條消息 $response = fread($socket, 8192); // 讀取服務器發送回來的消息 echo $response; } else { echo "Unable to connect to WebSocket server $host:$port\n"; }
舉個例子,假設你正在開發一個聊天室應用程序。當用戶進入聊天室時,你想向他們發送一個歡迎消息,這個時候你就可以使用 WebSocket 主動向服務器發起連接:
$client_ip = $_SERVER['REMOTE_ADDR']; $client_port = 7070; $target = 'tcp://'.$client_ip.':'.$client_port; $context = stream_context_create(); $options = array('socket' => array('so_bindtodevice' => 'eth0')); stream_context_set_option($context, $options); $socket = stream_socket_client($target, $errno, $errstr, 30, STREAM_CLIENT_CONNECT, $context); if($socket) { fwrite($socket, "Welcome to the Chat Room!");// 向客戶端發送歡迎消息 fclose($socket); } else { echo "Unable to connect to client $client_ip:$client_port\n"; }
除了發送歡迎消息以外,你還可以使用 WebSocket 向客戶端發送聊天消息,這樣可以極大地提高聊天室應用程序的實時交互性。
總結來說,使用 PHP 主動發起 WebSocket 連接非常簡單,只需要使用 stream_socket_client() 函數即可。現在,WebSocket 應用正在越來越多的應用場景中得到使用,如果你還沒有學習過 WebSocket,那么現在就是時候了!