📅  最后修改于: 2023-12-03 14:52:28.584000             🧑  作者: Mango
对于 PHP 程序员而言,需要在程序中监听端口或者提供 TCP 服务的情况并不少见。那么,在 PHP 中,如何提供服务端口呢?本篇文章将会介绍几种方式供大家参考。
socket 扩展为 PHP 提供了在 socket 上操作的接口,它提供了类似于 C 语言的 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。下面是示例代码:
$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 扩展是一个异步、并发的 PHP 网络通信框架,它提供了异步 TCP/UDP/HTTP/WebSocket 服务,以及 PHP 线程、进程、协程支持。
使用 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,使用 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 -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 服务器。在实际开发中,可以根据需求来选用合适的方式来实现服务端口。