-
Notifications
You must be signed in to change notification settings - Fork 40
Open
Description
环境:
OS: macOS 15.3.1 (24D70)
swoole-cli: 官网下载的 Swoole 6.0.1 (cli) (built: Feb 21 2025 13:27:18) (ZTS)
swoole-ws-server-9501.php
用于主ws 服务 侦听 9501 端口,有连接进入时,连接 swoole websocker server 9502 端口
<?php
$server = new Swoole\WebSocket\Server("0.0.0.0", 9501);
$server->on("open", function (Swoole\WebSocket\Server $server, $request) {
echo "新客户端连接,fd={$request->fd}, 时间: " . date("Y-m-d H:i:s") . "\n";
$server->push($request->fd, "欢迎,客户端 #{$request->fd} 已连接!");
});
$server->on("message", function (Swoole\WebSocket\Server $server, $frame) {
try {
$targetClient = new Swoole\Coroutine\Http\Client('127.0.0.1', 9502);
$targetClient->upgrade('/');
echo "Connected to WebSocket server\n";
$message = 'Hello, WebSocket Server!';
$targetClient->push($message);
echo "Sent: $message\n";
} catch (Exception $e) {
echo "Connection error: " . $e->getMessage() . "\n";
$targetClient = null;
}
});
$server->on("close", function (Swoole\WebSocket\Server $server, $fd) {
echo "客户端 #{$fd} 已断开连接, 时间: " . date("Y-m-d H:i:s") . "\n";
});
echo "WebSocket 服务器启动于 ws://0.0.0.0:9501\n";
$server->start();
swoole-ws-server-9502.php
用于目标 ws 服务 侦听 9502 端口
<?php
$server = new Swoole\WebSocket\Server("0.0.0.0", 9502);
$server->on("open", function (Swoole\WebSocket\Server $server, $request) {
echo "新客户端连接,fd={$request->fd}, 时间: " . date("Y-m-d H:i:s") . "\n";
$server->push($request->fd, "欢迎,客户端 #{$request->fd} 已连接!");
});
$server->on("message", function (Swoole\WebSocket\Server $server, $frame) {
$clientId = $frame->fd;
$message = $frame->data;
echo "收到消息: client_fd={$clientId}, message={$message}, 时间: " . date("Y-m-d H:i:s") . "\n";
$server->push($clientId, "服务器回显: " . $message);
});
$server->on("close", function (Swoole\WebSocket\Server $server, $fd) {
echo "客户端 #{$fd} 已断开连接, 时间: " . date("Y-m-d H:i:s") . "\n";
});
echo "WebSocket 服务器启动于 ws://0.0.0.0:9502\n";
$server->start();
swoole-ws-client-9501.php
连接 9501 服务的客户端
<?php
use Swoole\Coroutine\Http\Client;
use Swoole\Coroutine\run;
// 使用协程
Swoole\Coroutine\run(function () {
// 创建 WebSocket 客户端
$client = new Client('127.0.0.1', 9501);
#$client = new Client('127.0.0.1', 31000);
// 连接到 WebSocket 服务器
$client->upgrade('/');
echo "Connected to WebSocket server\n";
// 发送消息
$message = 'Hello, WebSocket Server!';
$client->push($message);
echo "Sent: $message\n";
// 接收消息
# $response = $client->recv();
# echo "Received: {$response->data}\n";
// 关闭连接
$client->close();
echo "Connection closed\n";
# sleep(1);
});
启动步骤:
启动
swoole-ws-server-9501.php
swoole-ws-server-9502.php
启动侦听
启动 swoole-ws-client-9501.php 触发连接 9501 服务
问题log:
服务 9502 console 报以下错误:
WebSocket 服务器启动于 ws://0.0.0.0:9502
新客户端连接,fd=1, 时间: 2025-03-12 03:39:20
收到消息: client_fd=1, message=Hello, WebSocket Server!, 时间: 2025-03-12 03:39:20
客户端 #1 已断开连接, 时间: 2025-03-12 03:39:20
[1] 59613 bus error swoole-cli-6.0.1 swoole-ws-server-9502.php
注:以上三个代码在同一台机器上执行
Metadata
Metadata
Assignees
Labels
No labels