当前位置:首页 > PHP

php socket实现长连接

2026-04-03 04:36:17PHP

PHP Socket 实现长连接的方法

创建 Socket 服务器端

使用 socket_create 函数创建一个 Socket 服务器端,指定协议族为 AF_INET,类型为 SOCK_STREAM,协议为 SOL_TCP。绑定 IP 地址和端口后,调用 socket_listen 开始监听连接请求。

$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_bind($socket, '0.0.0.0', 8080);
socket_listen($socket);

接受客户端连接

使用 socket_accept 函数接受客户端的连接请求,返回一个新的 Socket 资源用于与客户端通信。将该 Socket 设置为非阻塞模式以实现长连接。

$client = socket_accept($socket);
socket_set_nonblock($client);

处理客户端消息

通过循环不断读取客户端发送的消息,使用 socket_read 函数读取数据。如果读取到数据则进行处理,未读取到数据则继续等待。

while (true) {
    $data = socket_read($client, 1024);
    if ($data !== false && !empty($data)) {
        echo "Received: " . $data;
        socket_write($client, "Server received: " . $data);
    }
    usleep(100000);
}

保持连接活跃

为避免连接超时断开,可以定期发送心跳包。服务器端定时向客户端发送特定消息以确认连接状态,客户端收到后回复确认信息。

if (time() - $lastHeartbeat > 30) {
    socket_write($client, "HEARTBEAT");
    $lastHeartbeat = time();
}

客户端实现

客户端同样使用 socket_create 创建 Socket 并连接到服务器端。设置非阻塞模式后,循环发送消息并接收服务器响应。

$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_connect($socket, '127.0.0.1', 8080);
socket_set_nonblock($socket);

while (true) {
    socket_write($socket, "Hello Server");
    $response = socket_read($socket, 1024);
    if ($response !== false) {
        echo "Server response: " . $response;
    }
    usleep(100000);
}

错误处理

在 Socket 操作过程中加入错误处理逻辑,捕获可能的异常并记录日志,确保程序稳定性。

if ($socket === false) {
    echo "Socket creation failed: " . socket_strerror(socket_last_error());
    exit;
}

资源释放

在程序结束或连接断开时,调用 socket_close 关闭 Socket 连接,释放资源。

php socket实现长连接

socket_close($client);
socket_close($socket);

通过以上步骤可以实现 PHP Socket 长连接,适用于需要实时通信的场景。

标签: phpsocket
分享给朋友:

相关文章

php实现上传图片

php实现上传图片

上传图片的基本流程 PHP 实现图片上传功能需要处理文件接收、验证、保存等步骤。以下是具体实现方法。 创建 HTML 表单 在 HTML 中创建一个表单,设置 enctype="multipart/…

php 实现面包屑导航

php 实现面包屑导航

实现面包屑导航的方法 面包屑导航(Breadcrumb Navigation)是一种常见的网站导航方式,用于显示用户当前页面的路径。以下是几种在 PHP 中实现面包屑导航的方法。 基于 URL 路径…

php 实现md5

php 实现md5

使用 PHP 内置函数实现 MD5 PHP 提供了 md5() 函数,可以直接计算字符串的 MD5 哈希值。该函数接受一个字符串参数,返回 32 字符的十六进制哈希值。 $string = "H…

php搜索功能的实现

php搜索功能的实现

实现PHP搜索功能的方法 数据库搜索 使用SQL的LIKE语句进行模糊匹配,适用于简单的搜索需求。 $searchTerm = $_GET['search']; $query = "SELECT *…

php实现记住密码

php实现记住密码

实现记住密码功能的方法 使用PHP实现记住密码功能通常需要结合Cookie和Session技术。以下是几种常见的实现方式: 使用Cookie存储登录信息 在用户登录时创建一个长期有效的Cookie来…

php 实现文档预览

php 实现文档预览

PHP 实现文档预览的方法 在 PHP 中实现文档预览功能通常涉及将文档转换为可预览的格式(如 PDF、HTML 或图片)。以下是几种常见的方法: 使用第三方库转换文档为 PDF 通过调用外部库或工…