PHP socket編程

Socket

Socket並不是一個協議,本質上說Socket是對 TCP/IP 協議的封裝,它是一組接口,在設計模式中,Socket 其實就是一個門面(facade)模式,它把複雜的 TCP/IP 協議族隱藏在 Socket 接口後面,對用戶來說,一組簡單的接口就是全部,讓 Socket 去組織數據,以符合指定的協議。
在這裏插入圖片描述

php Socket

雖然PHP的強項是處理文本,一般用來寫網頁和http接口,但是官方依然提供了Socket擴展,編譯PHP時在配置中添加–enable-sockets 配置項來啓用。關於TCP客戶端和服務端之間的通信過程如下圖所示

在這裏插入圖片描述

服務端代碼

vim Server.php

<?php
set_time_limit(0); 
$ip = '127.0.0.1';
$port = 8887; 
$sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); 
socket_bind($sock, $ip, $port);
socket_listen($sock, 4); 
echo "Server Started, Listen On $ip:$port\n"; 
$accept = socket_accept($sock); 
socket_write($accept, "Hello World!\n", 8192); 
$buf = socket_read($accept, 8192); 
echo "Receive Msg: " . $buf . "\n"; socket_close($sock);

開啓服務 php Server.php
使用curl訪問服務 curl 127.0.0.1:8887
使用telnet訪問服務 telnet 127.0.0.1 8887

客戶端代碼

<?php
set_time_limit(0);

$port = 8887;
$ip = '127.0.0.1';
$sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);

echo "Connecting $ip:$port\n";
socket_connect($sock, $ip, $port);

$input = "Hello World Socket";
socket_write($sock, $input, strlen($input));

$out = socket_read($sock, 8192);
echo "Receive Msg: $out\n";

socket_close($sock);

總結

簡單使用php socket, 深入研究可以使用成熟框架workman和swoole

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章