📌  相关文章
📜  如何在 php 中服务端口(1)

📅  最后修改于: 2023-12-03 14:52:28.584000             🧑  作者: Mango

如何在 PHP 中服务端口

对于 PHP 程序员而言,需要在程序中监听端口或者提供 TCP 服务的情况并不少见。那么,在 PHP 中,如何提供服务端口呢?本篇文章将会介绍几种方式供大家参考。

socket 扩展

socket 扩展为 PHP 提供了在 socket 上操作的接口,它提供了类似于 C 语言的 socket 编程接口。通过它,你可以创建一个 socket 对象,并进行监听、发送和接收数据等操作。

创建一个监听 socket

使用 socket 扩展,可以通过调用 socket_create() 函数创建一个监听 socket。下面是示例代码:

$listenSocket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_bind($listenSocket, '0.0.0.0', 8000);
socket_listen($listenSocket, 5);

while(true) {
    $clientSocket = socket_accept($listenSocket);
    socket_write($clientSocket, 'Hello World!' . PHP_EOL);
    socket_close($clientSocket);
}

这段代码创建了一个监听 socket,绑定了本地ip 0.0.0.0,端口 8000,并使用 socket_listen() 函数开始监听。循环接受客户端连接,并在连接后发送一条 Hello World 的消息。

创建一个客户端 socket

除了创建一个监听 socket,使用 socket 扩展还可以创建一个客户端 socket。下面是示例代码:

$clientSocket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_connect($clientSocket, '127.0.0.1', 8000);
socket_write($clientSocket, "Hello Server!" . PHP_EOL);
$response = socket_read($clientSocket, 1024);
socket_close($clientSocket);

echo $response . PHP_EOL;

这段代码创建了一个客户端 socket,并使用 socket_connect() 函数连接到服务器。连接成功后,发送一条 Hello Server 的消息,并读取服务器的响应。最后,关闭 socket。

swoole 扩展

swoole 扩展是一个异步、并发的 PHP 网络通信框架,它提供了异步 TCP/UDP/HTTP/WebSocket 服务,以及 PHP 线程、进程、协程支持。

创建一个监听 socket

使用 swoole 扩展,可以通过调用 swoole_server 类创建一个监听 socket。下面是示例代码:

$server = new swoole_server('0.0.0.0', 8000);
$server->on('connect', function($server, $fd){
    echo "Client:Connect.\n";
});
$server->on('receive', function($server, $fd, $from_id, $data){
    $server->send($fd, "Hello World!" . PHP_EOL);
});
$server->on('close', function($server, $fd){
    echo "Client: Close.\n";
});

$server->start();

这段代码创建了一个监听 socket,绑定了本地ip 0.0.0.0,端口 8000。使用 on() 函数监听客户端连接、接收数据和断开连接事件,完成对客户端的响应。

创建一个客户端 socket

除了创建一个监听 socket,使用 swoole 扩展也可以创建一个客户端 socket。下面是示例代码:

$client = new swoole_client(SWOOLE_SOCK_TCP, SWOOLE_SOCK_ASYNC);

$client->on('connect', function($client){
    $client->send("Hello Server!" . PHP_EOL);
});

$client->on('receive', function($client, $data){
    echo "Server: $data";
    $client->close();
});

$client->on('error', function($client){
    echo "error";
});

$client->on('close', function($client){
    echo "Connection close\n";
});

$client->connect('127.0.0.1', 8000);

这段代码创建了一个异步客户端 socket,并使用 on() 函数监听连接成功、接收数据、错误和关闭连接事件。连接成功后,发送一条 Hello Server 的消息,并读取服务器的响应。最后,关闭 socket 连接。

PHP 内置的 web 服务器

PHP 内置了一个简单的 web 服务器,在开发调试过程中可以方便快捷地使用。下面是示例代码:

php -S 127.0.0.1:8000

这条命令在终端中输入后,即可开启一个监听本地ip 127.0.0.1,端口 8000 的 web 服务器。访问 http://127.0.0.1:8000/ 即可看到 PHP 根目录下的文件列表。需要注意的是,这个 web 服务器只适用于开发调试,不应在生产环境中使用。

总结

本篇文章介绍了在 PHP 中提供服务端口的几种方式,包括使用 socket 扩展和 swoole 扩展创建监听 socket 和客户端 socket,以及 PHP 内置的 web 服务器。在实际开发中,可以根据需求来选用合适的方式来实现服务端口。