This article brings you relevant knowledge about php socket, which mainly introduces IO multiplexing and how php socket implements web server? Friends who are interested can take a look below. I hope it will be helpful to everyone.
Multiplexing
The reason for this situation is that the IO model is blocking and can only be accessed by one client at the same time. There are two main solutions to solve this problem:selectand
epoll, common In the software,
Apacheuses the
selectmodel, and
nginxuses the
epollmodel. The
selectmodel is built into php, and the corresponding function is
socket_select. Multiplexing is the basis for implementing the http server.
socket_selectfunction that implements the
selectmodel. Its syntax is as follows:
socket_select( array &$read, array &$write, array &$except, int $seconds [, int $microseconds = 0]): int|false
read
The socket_selectfunction will return (otherwise it will continue to block), and at the same time modify the variable to the socket resource list of the current event (received message or client connection or disconnection), and continue to execute downwards.
write
nullmeans that you don’t care whether there are any write changes.
except
nullis "listening" All
seconds
nullis passed in, it will block, and if it is 0, it will be non-blocking. If it is >0, it will be the maximum blocking time
microseconds
Copy after login
socket_selectfunction will block the current process. When the
$tmp_socketssocket resource in the array has new When the client connects or disconnects or receives a new message, it will modify the
$tmp_socketsarray to the currently active socket resource, and then process the business logic by traversing the array
Use socket to implement a simple http server
http protocol specifies the specified data format based on socket, so we only need tosocket_writeWhen sending data according to the format, the browser can respond to the request normally
this is php worker'; $len = strlen($output); $response = "HTTP/1.1 200 OK\r\n"; $response .= "content-type: text/html\r\n"; $response .= "server: php socket\r\n"; $response .= "Content-Length: {$len}\r\n\r\n"; $response .= $output; socket_write($sock, $response); } } }
ip:8888in the browser, you can see the following:
GET / HTTP/1.1 Host: 124.222.**.**:8888 Connection: keep-alive Cache-Control: max-age=0 Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.0.0 Safari/537.36 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9 Accept-Encoding: gzip, deflate Accept-Language: zh-CN,zh;q=0.9 Cookie: jenkins-timestamper-offset=-28800000; _ga=GA1.1.1403944751.1652010033; _ga_2GM6102E19=GS1.1.1652802985.7.1.1652803014.0
file_get_contentRead the content of the specified file and return it to the browser
Recommended learning: "PHP Video Tutorial"
#The above is the detailed content of IO multiplexing of PHP+Socket series and implementation of web server. For more information, please follow other related articles on the PHP Chinese website!