php实现websochet
PHP 实现 WebSocket
使用 Ratchet 库
Ratchet 是一个流行的 PHP WebSocket 库,基于 ReactPHP 实现,适合构建实时应用。
安装 Ratchet:
composer require cboden/ratchet
创建 WebSocket 服务器:
<?php
use Ratchet\Server\IoServer;
use Ratchet\Http\HttpServer;
use Ratchet\WebSocket\WsServer;
use MyApp\Chat;
require dirname(__DIR__) . '/vendor/autoload.php';
class Chat implements \Ratchet\MessageComponentInterface {
protected $clients;
public function __construct() {
$this->clients = new \SplObjectStorage;
}
public function onOpen(\Ratchet\ConnectionInterface $conn) {
$this->clients->attach($conn);
echo "New connection: {$conn->resourceId}\n";
}
public function onMessage(\Ratchet\ConnectionInterface $from, $msg) {
foreach ($this->clients as $client) {
if ($from !== $client) {
$client->send($msg);
}
}
}
public function onClose(\Ratchet\ConnectionInterface $conn) {
$this->clients->detach($conn);
echo "Connection closed: {$conn->resourceId}\n";
}
public function onError(\Ratchet\ConnectionInterface $conn, \Exception $e) {
echo "Error: {$e->getMessage()}\n";
$conn->close();
}
}
$server = IoServer::factory(
new HttpServer(new WsServer(new Chat())),
8080
);
$server->run();
运行服务器:

php server.php
使用 Swoole 扩展
Swoole 是一个高性能 PHP 协程框架,内置 WebSocket 支持。
安装 Swoole:

pecl install swoole
创建 WebSocket 服务器:
<?php
$server = new Swoole\WebSocket\Server("0.0.0.0", 9501);
$server->on('open', function (Swoole\WebSocket\Server $server, $request) {
echo "Connection open: {$request->fd}\n";
});
$server->on('message', function (Swoole\WebSocket\Server $server, $frame) {
foreach ($server->connections as $fd) {
if ($fd !== $frame->fd) {
$server->push($fd, $frame->data);
}
}
});
$server->on('close', function ($server, $fd) {
echo "Connection closed: {$fd}\n";
});
$server->start();
运行服务器:
php server.php
客户端连接示例
使用 JavaScript 连接 WebSocket 服务器:
const socket = new WebSocket('ws://localhost:8080');
socket.onopen = function(e) {
console.log('Connected to server');
socket.send('Hello Server!');
};
socket.onmessage = function(event) {
console.log('Message from server:', event.data);
};
socket.onclose = function(event) {
console.log('Connection closed');
};
注意事项
- Ratchet 适合小型应用,Swoole 适合高性能场景。
- 生产环境建议使用 Nginx 反向代理 WebSocket 连接。
- 确保防火墙开放 WebSocket 端口(如 8080 或 9501)。






