IO multiplexing of PHP+Socket series and implementation of web server

藏色散人
Release: 2023-04-11 10:20:01
forward
3897 people have browsed it

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.

php native socket IO multiplexing and web server implementation

Multiplexing

## Previous articleSimple server-client communication is implemented through native sockets, but when multiple clients are connected, the server can only handle the request of the first client and cannot serve subsequent clients

IO multiplexing of PHP+Socket series and implementation of web server

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:

  • Multiple processes, that is, multiple processes are started on the server to monitor

  • IO multiplexing mechanism, which simply implements the use of N clients One network cable simultaneously accesses

and multiplexing is divided into two different models, namely

selectandepoll, common In the software,Apacheuses theselectmodel, andnginxuses theepollmodel. Theselectmodel is built into php, and the corresponding function issocket_select. Multiplexing is the basis for implementing the http server.

Syntax

is in In the previous article, we introduced that PHP's native socket has a built-in

socket_selectfunction that implements theselectmodel. Its syntax is as follows:

socket_select( array &$read, array &$write, array &$except, int $seconds [, int $microseconds = 0]): int|false
Copy after login
Parameters

  • read

    The socket resource monitored by the server, when it changes (that is, a new message is received or a client is connected or disconnected),

    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

    #Monitor whether there is a client writing data. Passing in

    nullmeans that you don’t care whether there are any write changes.

  • except

    The elements to be excluded in the socket, passing in

    nullis "listening" All

  • seconds

    Seconds and microseconds together form the timeout parameter. If

    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

Optimization

In our

last articlewe simply implemented the socket server-side monitoring connection with the client. Next, we build the basis of the server-side monitoring code. Optimize the code through multiplexing:


        
Copy after login

In this example, the

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

IO multiplexing of PHP+Socket series and implementation of web server

Use socket to implement a simple http server

http protocol specifies the specified data format based on socket, so we only need to

socket_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); } } }
Copy after login

Run this example on the server, and then access

ip:8888in the browser, you can see the following:

IO multiplexing of PHP+Socket series and implementation of web server

At the same time, the server will output the following content:

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
Copy after login

This content is the original data requested by the user, which can parse this data and respond according to the request, such as using

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!

Related labels:
source:learnku.com
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!