php 实现端口监听
PHP 实现端口监听的方法
PHP 可以通过多种方式实现端口监听,以下是几种常见的方法:
使用 socket 函数
PHP 的 socket 扩展提供了一系列函数用于创建和管理套接字连接,可以实现基本的端口监听功能。
$host = '127.0.0.1';
$port = 8080;
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_bind($socket, $host, $port);
socket_listen($socket);
echo "Listening on $host:$port\n";
while (true) {
$client = socket_accept($socket);
$message = "Hello, client!\n";
socket_write($client, $message, strlen($message));
socket_close($client);
}
socket_close($socket);
使用 stream_socket_server
stream_socket_server 是另一种实现端口监听的方式,基于流式套接字。
$host = '127.0.0.1';
$port = 8080;
$server = stream_socket_server("tcp://$host:$port", $errno, $errstr);
if (!$server) {
die("Error: $errstr ($errno)");
}
echo "Listening on $host:$port\n";
while ($client = stream_socket_accept($server)) {
fwrite($client, "Hello, client!\n");
fclose($client);
}
fclose($server);
使用 ReactPHP
ReactPHP 是一个异步事件驱动的 PHP 库,适合构建高性能的网络应用。
require 'vendor/autoload.php';
$loop = React\EventLoop\Factory::create();
$socket = new React\Socket\Server('127.0.0.1:8080', $loop);
$socket->on('connection', function (React\Socket\ConnectionInterface $connection) {
$connection->write("Hello, client!\n");
$connection->on('data', function ($data) use ($connection) {
$connection->write("You said: $data");
});
});
echo "Listening on 127.0.0.1:8080\n";
$loop->run();
使用 Ratchet
Ratchet 是一个 WebSocket 库,可以用于实现实时通信应用。

require 'vendor/autoload.php';
use Ratchet\Server\IoServer;
use Ratchet\Http\HttpServer;
use Ratchet\WebSocket\WsServer;
use MyApp\Chat;
$server = IoServer::factory(
new HttpServer(
new WsServer(
new Chat()
)
),
8080
);
$server->run();
注意事项
- 确保 PHP 安装了必要的扩展(如 socket 扩展)。
- 对于生产环境,建议使用成熟的框架或库(如 ReactPHP 或 Ratchet)。
- 考虑使用 Supervisor 或其他进程管理工具来保持服务的稳定性。
以上方法可以根据具体需求选择,简单的端口监听可以使用原生 PHP 函数,复杂的应用则建议使用专门的库或框架。






