Basic knowledge of Socket in PHP

墨辰丷
Release: 2023-03-30 13:48:02
Original
1454 people have browsed it

This article mainly introduces the basic knowledge of Socket in PHP. Interested friends can refer to it. I hope it will be helpful to everyone.

What are TCP/IP and UDP?

                                    TCP/IP (Transmission Control Protocol/Internet Protocol) is Transmission Control Protocol/Internet Protocol. It is an industry standard protocol set designed for wide area networks (WANs).
UDP (User Data Protocol, User Datagram Protocol) is a protocol corresponding to TCP. It is a member of the TCP/IP protocol suite.
There is a picture here that shows the relationship between these agreements.

2015811151417312.jpg (596×448)

The TCP/IP protocol suite includes the transport layer, network layer, and link layer. Now you know the relationship between TCP/IP and UDP.
Where is Socket? In Figure 1, we do not see the shadow of Socket, so where is it? Let’s use pictures to speak clearly.

2015811151446490.jpg (542×476)

It turns out that the Socket is here.
What is Socket? Socket is an intermediate software abstraction layer for communication between the application layer and the TCP/IP protocol suite. It is a set of interfaces. In the design mode, Socket is actually a facade mode, which hides the complex TCP/IP protocol family behind the Socket interface. For users, a set of simple interfaces is all, allowing Socket to organize data to meet the specified requirements. protocol.
Will you use them? The predecessors have done a lot for us, and communication between networks has become much simpler, but after all, there is still a lot of work to be done. When I heard about Socket programming before, I thought it was relatively advanced programming knowledge, but as long as we understand the working principle of Socket programming, the mystery will be lifted.
A scene in life. If you want to call a friend, dial the number first. When the friend hears the ringing tone, he picks up the phone. At this time, you and your friend are connected and you can talk. When the communication is over, hang up the phone to end the conversation. Scenes in life explain how this works. Maybe the TCP/IP protocol family was born in life, but this is not necessarily the case.

2015811151507191.jpg (478×491)

Overview of Socket Programming in PHPphp5.3 comes with a socket module, which enables php to have socket communication capabilities. For specific APIs, please refer to the official manual: http ://php.net/manual/zh/function.socket-create.php, the specific implementation is very similar to c, except that it lacks the underlying operations of memory allocation and network byte order conversion

At the same time, the pcntl module of PHP and the posix module can realize basic process management, signal processing and other operating system level functions. There are two very key functions here, pcntl_fork() and posix_setsid(). Forking () a process means creating a copy of the running process. The copy is considered a child process, and the original process is considered the parent process. After fork() is run, it can be separated from the process and terminal control that started it, which also means that the parent process can exit freely. pcntl_fork() return value, -1 indicates execution failure, 0 indicates in the child process, and greater than 0 indicates in the parent process. setsit(), which first makes the new process the "leader" of a new session, and finally makes the process no longer control the terminal. This is also the most critical step in becoming a daemon process, which means that the process will not be forced to exit when the terminal is closed. This is a critical step for a resident process that cannot be interrupted. Perform the last fork(). This step is not necessary, but it is usually done. Its greatest significance is to prevent the control terminal from being obtained.

What is a daemon process? A daemon is usually thought of as a background task that does not control the terminal. It has three obvious characteristics:

  1. Running in the background

  2. Detached from the process that started it

  3. No need for terminal control

The most common implementation method: fork() -> setsid() -> fork(), the run_server() method in the code implements the daemon process .

Server-side socket monitoring code

  <?php 
   
  // 接受客户端请求,回复固定的响应内容 
  function server_listen_socket ($address, $port) 
  { 
    $buffer = "Msg from wangzhengyi server, so kubi..."; 
    $len = strlen($buffer); 
     
    // create, bind and listen to socket 
    $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); 
    if (! $socket) { 
      echo "failed to create socket:" . socket_strerror($socket) . "\n"; 
      exit(); 
    } 
     
    $bind_flag = socket_bind($socket, $address, $port); 
    if (! $bind_flag) { 
      echo "failed to bind socket:" . socket_strerror($bind_flag) . "\n"; 
      exit(); 
    } 
     
    $backlog = 20; 
    $listen_flag = socket_listen($socket, $backlog); 
    if (! $listen_flag) { 
      echo "failed to listen to socket:" . socket_strerror($listen_flag) . "\n"; 
      exit(); 
    } 
     
    echo "waiting for clients to connect\n"; 
     
    while (1) { 
      if (($accept_socket = socket_accept($socket)) == FALSE) { 
        continue; 
      } else { 
        socket_write($accept_socket, $buffer, $len); 
        socket_close($accept_socket); 
      } 
    } 
  } 
   
  function run_server () 
  { 
    $pid1 = pcntl_fork(); 
    if ($pid1 == 0) { 
      // first child process 
       
      // 守护进程的一般流程:fork()->setsid()->fork() 
      posix_setsid(); 
       
      if (($pid2 = pcntl_fork()) == 0) { 
        $address = "192.168.1.71"; 
        $port = "8767"; 
        server_listen_socket($address, $port); 
      } else { 
        // 防止获得控制终端 
        exit(); 
      } 
    } else { 
      // wait for first child process exit 
      pcntl_wait($status); 
    } 
  } 
   
  // server守护进程 
  run_server();
Copy after login

Operation effectStart the server-side socket process to see if it is running in the background. The effect is as shown in the figure:

2015811151526030.png (985×174)

Client access can be accessed through a browser or curl. Here, curl is used to access directly

2015811151634550.png (930×64)

##Summary : The above is the entire content of this article, I hope it will be helpful to everyone's study.

related suggestion:

How to use php magic functions and magic constants

How to use PHP magic methods __call and __callStatic

PHP How to read large CSV files and import them into the database

The above is the detailed content of Basic knowledge of Socket in PHP. For more information, please follow other related articles on the PHP Chinese website!

Related labels:
source:php.cn
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
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template