The attribute reusePort in Workerman that you have to know
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.
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();
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 asWorker) 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 theShocking 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 theThundering 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 reuseportAlthough you only need to set reusePort totrue 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(...); ... } ... }
listen() The function of the function is to create a Socket in the current process and start listening for requests.
false, the main process calls the listen() function before creating the Worker:
protected function initWorkers() { .... if (!$worker->reusePort) { $worker->listen(); } .... }
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(); } ... } ... }
if ($this->reusePort) { $context = stream_context_create(); stream_context_set_option($context, 'socket', 'so_reuseport', 1); }
推荐学习: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!

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics



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

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.

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: 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 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 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 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 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
