ethancao/websocket

A simple PHP WebSocket library.

Installs: 0

Dependents: 0

Suggesters: 0

Security: 0

Stars: 0

Watchers: 0

Forks: 0

Open Issues: 0

pkg:composer/ethancao/websocket

v1.0.0 2025-10-21 01:31 UTC

This package is auto-updated.

Last update: 2025-10-21 01:49:03 UTC


README

一个轻量级、简单易用的PHP WebSocket服务器库,支持基本的WebSocket通信功能。

功能特性

  • 支持标准WebSocket协议
  • 事件驱动架构(onOpen、onMessage、onClose事件)
  • 支持单发消息和广播消息
  • 自动心跳检测(ping/pong)
  • 简单易用的API接口

系统要求

  • PHP 7.4 或更高版本
  • 需要启用PHP的stream_socket扩展(通常默认启用)

安装

使用Composer安装:

composer require ethancao/websocket

基本使用

以下是一个简单的WebSocket服务器示例:

<?php
require 'vendor/autoload.php';

use Ethancao\WebSocket\WebSocketServer;

// 创建WebSocket服务器实例,监听所有IP的8080端口
$server = new WebSocketServer('0.0.0.0', 8080);

// 注册连接建立事件回调
$server->on('open', function($conn) {
    echo "新连接已建立\n";
    // 可以在这里向新连接发送欢迎消息
});

// 注册消息接收事件回调
$server->on('message', function($conn, $msg) use ($server) {
    echo "收到消息: $msg\n";
    // 向发送者回复消息
    $server->send($conn, "你发送了: $msg");
    // 广播消息给所有连接的客户端
    $server->send(null, "广播: $msg");
});

// 注册连接关闭事件回调
$server->on('close', function($conn) {
    echo "连接已关闭\n";
});

// 启动服务器
$server->start();

将上面的代码保存为server.php,然后运行:

php server.php

服务器将开始监听WebSocket连接。

API 文档

WebSocketServer 类

构造函数

public function __construct(string $host = '0.0.0.0', int $port = 8080)
  • $host: 服务器绑定的主机地址,默认为'0.0.0.0'(所有网络接口)
  • $port: 服务器监听的端口,默认为8080

on 方法

public function on(string $event, callable $callback): void
  • $event: 事件名称,可以是 'open', 'message', 'close'
  • $callback: 事件处理函数

send 方法

public function send($conn = null, string $payload = '', int $opcode = 0x1): void
  • $conn: 连接资源(发送给特定客户端)或null(广播给所有客户端)
  • $payload: 要发送的消息内容
  • $opcode: WebSocket操作码,默认为0x1(文本帧)

start 方法

public function start(): void

启动WebSocket服务器,开始接受连接和处理消息。

客户端连接示例

使用JavaScript连接到WebSocket服务器:

const socket = new WebSocket('ws://localhost:8080');

socket.addEventListener('open', function (event) {
    console.log('已连接到服务器');
    socket.send('Hello Server!');
});

socket.addEventListener('message', function (event) {
    console.log('收到服务器消息:', event.data);
});

socket.addEventListener('close', function (event) {
    console.log('与服务器的连接已关闭');
});

socket.addEventListener('error', function (event) {
    console.error('连接错误:', event);
});

高级用法

实现聊天服务器

可以基于此库实现一个简单的聊天服务器,允许多个客户端之间互相通信。

集成到现有项目

可以将此WebSocket服务器与现有的PHP应用程序集成,实现实时通信功能。

注意事项

  • 此库是为学习和简单应用场景设计的,对于生产环境的高并发应用,建议使用Swoole、Workerman等更强大的异步框架
  • 服务器在start()方法中启动一个无限循环,会阻塞当前进程
  • 如果需要在Web服务器环境中使用,请考虑使用PHP的cli模式运行

许可证

本项目采用MIT许可证 - 详情请查看 LICENSE 文件

贡献

欢迎提交Issue和Pull Request!