Home PHP Framework Workerman The attribute reusePort in Workerman that you have to know

The attribute reusePort in Workerman that you have to know

Jul 23, 2021 pm 04:01 PM
workerman

Workerman is an open source, high-performance asynchronous PHP socket framework developed purely in PHP. Supports TCP long connections and many protocols such as websocket and MQTT. Today we will introduce the reusePort attribute in Workerman. You can refer to it if necessary.

The attribute reusePort in Workerman that you have to know

Workerman is a high-performance PHP Socket server framework. You can use Workerman to program directly at the TCP layer. The basic programming routine is:

$w = new Workerman\Worker('tcp://0.0.0.0:80');
$w->count = 4;
$w->onMessage = function(Workerman\COnnection\TcpConnection $connection, array $data) {
    $connection->send('Hello World');
};
Worker::runAll();
Copy after login

During the use process, I wonder if you have paid attention to the reusePort parameter. It is set to # by default. ##false. What is the use of this parameter? Under what circumstances do we need to set it to true to improve performance?

1. The role of reuseport

Regarding the reusePort parameter, Workerman’s official document explains it this way:

Allows multiple unrelated people after turning on listening port reuse Related processes listen to the same port, and the system kernel performs load balancing and determines which process to hand over the socket connection for processing. This avoids the thundering herd effect and improves the performance of multi-process short connection applications.

If you have not studied Linux network programming in depth, it is difficult to understand this sentence. Here is a brief explanation:

The server program usually receives client requests by listening to a certain port number on the server. In Linux, the server network card port number is abstracted into a

Socket.

In order to improve performance, general server programs have multiple processes (commonly known as

Worker) listening to the same Socket when running. When no client connection comes, these Workers are In the suspended state, no CPU resources are consumed.

If a client connection arrives at a certain moment, the Linux kernel will wake up these Workers at the same time and let them compete to handle the connection.

As a result, only one Worker will get the chance to handle the connection. , other Workers continue to return to the suspended state after the competition fails. The process of waking up a Worker consumes CPU resources. The greater the number of Workers, the more CPU resources are consumed, resulting in a waste of resources. This is often referred to as the

Shocking Herd Effect.

You may ask: Why not only wake up one Worker at a time? Unfortunately, the Linux kernel does not have such a feature.

Fortunately, in Linux 3.9 and later versions, the reuseport feature is added. What is the use of this feature?

Before reuseport, a port number could only be monitored by one Socket. With reuseport, this restriction is broken: a port number can be monitored by multiple Sockets at the same time.

As mentioned earlier, the Linux kernel cannot wake up only one Worker at a time, but the kernel can evenly send client connections to a group of Sockets listening on the same port.

As shown in the figure, each Worker has its own Socket, all listening on the same port. When a client connection arrives, the kernel forwards the connection to a Socket, and this Socket will only wake up the Worker to which it belongs. This cleverly solves the

Thundering Herd Effect and improves the overall performance.

From this, we can conclude: If your Linux kernel version is 3.9 and above, then when using Workerman, you can set reusePort to true to improve program running efficiency.

2. How Workerman uses reuseport

Although you only need to set reusePort to

true in Workerman, you can enjoy this advanced feature of Linux. But in Workerman's source code, it's not just as simple as turning on a kernel parameter. Workerman hides a lot of design details for you, let’s take a look. The

Worker class is the most important class in Workerman, among which there is a listen() function:

protected function listen()
{
    ...
    if (!$this->_mainSocket) {
        ...
        $this->_mainSocket = stream_socket_server(...);
        ...
    }
    ...
}
Copy after login

listen() The function of the function is to create a Socket in the current process and start listening for requests.

When reusePort is

false, the main process calls the listen() function before creating the Worker:

protected function initWorkers() {
    ....
    if (!$worker->reusePort) {
        $worker->listen();
    }
    ....
}
Copy after login

Then the main process passes pcntl_fork () Create Worker. pcntl_fork() has a feature: the variables in the created child process (Worker) are copied from the parent process, including the mainSocket created by the parent process. Therefore, when reusePort is **false**, all Workers copy the mainSocket of the parent process. Therefore, when reusePort is ∗∗false∗∗, all Workers copy the _mainSocket of the parent process, that is, share one Socket.

When reusePort is

true, the situation is different. The main process will not call listen() before creating a Worker. Instead, after creating a Worker, each Worker will initiate a listen() call:

protected static function forkOneWorkerForLinux($worker) {
    ...
    $pid = pcntl_fork();
    if ($pid === 0) {
        if ($worker->reusePort) {
            $worker->listen();
        }
        ...
    }
    ...
}
Copy after login

The result is that each child process (Worker) creates its own Socket.

Finally, if you want the kernel to enable the reuseport function, you need to manually set the Socket context:

if ($this->reusePort) {
    $context = stream_context_create();
    stream_context_set_option($context, 'socket', 'so_reuseport', 1);
}
Copy after login

推荐学习:php视频教程

The above is the detailed content of The attribute reusePort in Workerman that you have to know. For more information, please follow other related articles on the PHP Chinese website!

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

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Article

R.E.P.O. Energy Crystals Explained and What They Do (Yellow Crystal)
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Best Graphic Settings
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. How to Fix Audio if You Can't Hear Anyone
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: How To Unlock Everything In MyRise
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

Implement file upload and download in Workerman documents Implement file upload and download in Workerman documents Nov 08, 2023 pm 06:02 PM

To implement file upload and download in Workerman documents, specific code examples are required. Introduction: Workerman is a high-performance PHP asynchronous network communication framework that is simple, efficient, and easy to use. In actual development, file uploading and downloading are common functional requirements. This article will introduce how to use the Workerman framework to implement file uploading and downloading, and give specific code examples. 1. File upload: File upload refers to the operation of transferring files on the local computer to the server. The following is used

Which one is better, swoole or workerman? Which one is better, swoole or workerman? Apr 09, 2024 pm 07:00 PM

Swoole and Workerman are both high-performance PHP server frameworks. Known for its asynchronous processing, excellent performance, and scalability, Swoole is suitable for projects that need to handle a large number of concurrent requests and high throughput. Workerman offers the flexibility of both asynchronous and synchronous modes, with an intuitive API that is better suited for ease of use and projects that handle lower concurrency volumes.

How to implement the basic usage of Workerman documents How to implement the basic usage of Workerman documents Nov 08, 2023 am 11:46 AM

Introduction to how to implement the basic usage of Workerman documents: Workerman is a high-performance PHP development framework that can help developers easily build high-concurrency network applications. This article will introduce the basic usage of Workerman, including installation and configuration, creating services and listening ports, handling client requests, etc. And give corresponding code examples. 1. Install and configure Workerman. Enter the following command on the command line to install Workerman: c

Workerman development: How to implement real-time video calls based on UDP protocol Workerman development: How to implement real-time video calls based on UDP protocol Nov 08, 2023 am 08:03 AM

Workerman development: real-time video call based on UDP protocol Summary: This article will introduce how to use the Workerman framework to implement real-time video call function based on UDP protocol. We will have an in-depth understanding of the characteristics of the UDP protocol and show how to build a simple but complete real-time video call application through code examples. Introduction: In network communication, real-time video calling is a very important function. The traditional TCP protocol may have problems such as transmission delays when implementing high-real-time video calls. And UDP

How to implement the reverse proxy function in the Workerman document How to implement the reverse proxy function in the Workerman document Nov 08, 2023 pm 03:46 PM

How to implement the reverse proxy function in the Workerman document requires specific code examples. Introduction: Workerman is a high-performance PHP multi-process network communication framework that provides rich functions and powerful performance and is widely used in Web real-time communication and long connections. Service scenarios. Among them, Workerman also supports the reverse proxy function, which can realize load balancing and static resource caching when the server provides external services. This article will introduce how to use Workerman to implement the reverse proxy function.

How to use Workerman to build a high-availability load balancing system How to use Workerman to build a high-availability load balancing system Nov 07, 2023 pm 01:16 PM

How to use Workerman to build a high-availability load balancing system requires specific code examples. In the field of modern technology, with the rapid development of the Internet, more and more websites and applications need to handle a large number of concurrent requests. In order to achieve high availability and high performance, the load balancing system has become one of the essential components. This article will introduce how to use the PHP open source framework Workerman to build a high-availability load balancing system and provide specific code examples. 1. Introduction to Workerman Worke

How to implement the timer function in the Workerman document How to implement the timer function in the Workerman document Nov 08, 2023 pm 05:06 PM

How to implement the timer function in the Workerman document Workerman is a powerful PHP asynchronous network communication framework that provides a wealth of functions, including the timer function. Use timers to execute code within specified time intervals, which is very suitable for application scenarios such as scheduled tasks and polling. Next, I will introduce in detail how to implement the timer function in Workerman and provide specific code examples. Step 1: Install Workerman First, we need to install Worker

How to implement TCP/UDP communication in Workerman documentation How to implement TCP/UDP communication in Workerman documentation Nov 08, 2023 am 09:17 AM

How to implement TCP/UDP communication in the Workerman document requires specific code examples. Workerman is a high-performance PHP asynchronous event-driven framework that is widely used to implement TCP and UDP communication. This article will introduce how to use Workerman to implement TCP and UDP-based communication and provide corresponding code examples. 1. Create a TCP server for TCP communication. It is very simple to create a TCP server using Workerman. You only need to write the following code: <?ph

See all articles