当前位置:首页 > PHP

php 实现websocket

2026-02-14 17:14:54PHP

PHP 实现 WebSocket

要在 PHP 中实现 WebSocket,可以使用 Ratchet 库,它是一个流行的 PHP WebSocket 库,基于 ReactPHP 构建。以下是实现 WebSocket 服务端和客户端通信的详细方法。

安装 Ratchet

使用 Composer 安装 Ratchet:

php 实现websocket

composer require cboden/ratchet

创建 WebSocket 服务器

创建一个 PHP 文件(如 server.php),编写 WebSocket 服务器逻辑:

<?php
use Ratchet\MessageComponentInterface;
use Ratchet\ConnectionInterface;
use Ratchet\Server\IoServer;
use Ratchet\Http\HttpServer;
use Ratchet\WebSocket\WsServer;

require __DIR__ . '/vendor/autoload.php';

class MyWebSocket implements MessageComponentInterface {
    protected $clients;

    public function __construct() {
        $this->clients = new \SplObjectStorage;
    }

    public function onOpen(ConnectionInterface $conn) {
        $this->clients->attach($conn);
        echo "New connection: {$conn->resourceId}\n";
    }

    public function onMessage(ConnectionInterface $from, $msg) {
        foreach ($this->clients as $client) {
            if ($client !== $from) {
                $client->send($msg);
            }
        }
    }

    public function onClose(ConnectionInterface $conn) {
        $this->clients->detach($conn);
        echo "Connection closed: {$conn->resourceId}\n";
    }

    public function onError(ConnectionInterface $conn, \Exception $e) {
        echo "Error: {$e->getMessage()}\n";
        $conn->close();
    }
}

$server = IoServer::factory(
    new HttpServer(new WsServer(new MyWebSocket())),
    8080
);

$server->run();

启动 WebSocket 服务器

在终端运行以下命令启动服务器:

php 实现websocket

php server.php

服务器将在 8080 端口监听 WebSocket 连接。

创建 WebSocket 客户端

使用 JavaScript 创建一个简单的 WebSocket 客户端:

<!DOCTYPE html>
<html>
<head>
    <title>WebSocket Client</title>
</head>
<body>
    <input type="text" id="message" placeholder="Enter message">
    <button onclick="sendMessage()">Send</button>
    <div id="output"></div>

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

        socket.onopen = function(e) {
            console.log('Connected to WebSocket server');
        };

        socket.onmessage = function(e) {
            document.getElementById('output').innerHTML += `<p>${e.data}</p>`;
        };

        socket.onclose = function(e) {
            console.log('Disconnected from WebSocket server');
        };

        function sendMessage() {
            const message = document.getElementById('message').value;
            socket.send(message);
        }
    </script>
</body>
</html>

测试 WebSocket 通信

  1. 确保服务器正在运行(php server.php)。
  2. 在浏览器中打开客户端 HTML 文件。
  3. 输入消息并点击发送按钮,消息将通过 WebSocket 广播到所有连接的客户端。

注意事项

  • 端口冲突:确保 8080 端口未被占用,或修改为其他可用端口。
  • 生产环境:在生产环境中,建议使用 Nginx 或 Apache 反向代理 WebSocket 连接。
  • 扩展性:对于高并发场景,可能需要结合 Redis 或其他消息队列实现多服务器通信。

通过以上步骤,可以实现基本的 WebSocket 通信功能。

标签: phpwebsocket
分享给朋友:

相关文章

vue实现websocket

vue实现websocket

Vue 实现 WebSocket 连接 在 Vue 项目中实现 WebSocket 连接,可以通过原生 WebSocket API 或第三方库(如 socket.io-client)完成。以下是两种方…

php实现栈

php实现栈

栈的基本概念 栈(Stack)是一种遵循后进先出(LIFO)原则的数据结构。核心操作包括: push:元素入栈。 pop:元素出栈(返回并移除栈顶元素)。 peek:查看栈顶元素(不移除…

php实现静态

php实现静态

静态化实现方法 PHP实现静态化主要通过生成HTML文件或缓存机制来减少服务器动态解析的开销。以下是几种常见方法: 生成静态HTML文件 通过file_put_contents()将动态内容保存为H…

php 实现下载

php 实现下载

PHP 实现文件下载的方法 使用 PHP 实现文件下载可以通过设置 HTTP 头信息,强制浏览器将文件作为附件下载而非直接打开。 基本下载实现 $file_path = 'path/to/your/…

php 线程实现

php 线程实现

PHP 线程实现方法 PHP 本身是单线程语言,但可以通过扩展或库实现多线程功能。以下是几种常见的实现方式: 使用 pthreads 扩展 pthreads 是一个 PHP 扩展,允许在 PHP 中…

php登陆功能实现

php登陆功能实现

实现PHP登录功能 数据库准备 创建一个用户表存储登录信息,基本字段包括用户名、密码(需加密)等: CREATE TABLE users ( id INT AUTO_INCREMENT PR…