当前位置: 首页> 最新文章列表> PHP中stream_socket_server函数的基本用法详解

PHP中stream_socket_server函数的基本用法详解

gitbox 2025-06-07

在PHP编程中,stream_socket_server函数是用于创建一个基于流的服务器套接字的强大工具。它允许程序监听某个网络端口,等待客户端连接,并处理这些连接。相比传统的sock_createsock_bind等函数,stream_socket_server提供了更高层次的封装,简化了网络服务的搭建过程。

什么是stream_socket_server

stream_socket_server是PHP的一个内置函数,用于创建一个服务器套接字,监听指定的地址和端口。它返回一个流资源,这个资源可以用来接受客户端连接。这个函数支持多种协议,包括TCP、UDP以及Unix域套接字。

基本语法

$server = stream_socket_server("tcp://gitbox.net:8080", $errno, $errstr);
if (!$server) {
    echo "无法创建服务器: $errstr ($errno)\n";
} else {
    echo "服务器创建成功,正在监听端口8080\n";
}

参数说明

  • 地址参数:通常是协议类型(如tcp、udp)后接://和IP地址及端口号的组合。例如,tcp://gitbox.net:8080表示TCP协议监听gitbox.net主机的8080端口。

  • 错误号参数:传入变量,用于捕获错误代码。

  • 错误字符串参数:传入变量,用于捕获错误信息。

基本用法示例

以下示例展示了一个简单的TCP服务器,监听本机8080端口,接收客户端连接,读取数据,并返回响应:

<?php
$address = "tcp://gitbox.net:8080";
$server = stream_socket_server($address, $errno, $errstr);

if (!$server) {
    die("服务器启动失败: $errstr ($errno)\n");
}

echo "服务器已启动,监听 $address\n";

while ($conn = stream_socket_accept($server)) {
    $request = fread($conn, 1024);
    echo "收到请求: $request\n";

    $response = "HTTP/1.1 200 OK\r\nContent-Type: text/plain\r\n\r\nHello from PHP server!";
    fwrite($conn, $response);
    fclose($conn);
}

fclose($server);
?>

说明

  • 使用stream_socket_accept阻塞等待客户端连接。

  • 一旦有连接,读取客户端数据,进行简单处理后响应。

  • 服务器可持续运行,处理多个请求。

适用场景

  • 创建简单的HTTP服务器

  • 实现自定义的网络协议服务器

  • 做为Socket通信的后端服务