Swoole的webSocket部分服务端封装

//封装单例模式(三私一公)
class SwooleWebSocket
{
private static $instance; //存放当前对象属性
private static $server; //存放webSocket对象属性

private $dir = 'swooleLogs/swoole.log';

private function __construct() {
//创建webSocket对象
self::$server = new Swoole\WebSocket\Server('0.0.0.0', 9505);
//设置参数
self::$server->set([
'daemonize' => 1, // 作为守护进程运行,需同时设置log_file
'log_file' => $this->dir, // 指定标准输出和错误日志文件
]);
//注册事件
self::$server->on('open',[$this,'onOpen']); //将当前类中的onOpen方法作为open的事件处理函数
self::$server->on('message',[$this,'onMessage']);
self::$server->on('close',[$this,'onClose']);
}

private function __clone() {
// TODO: Implement __clone() method.
trigger_error('Clone is not allowed !');
}

public static function getInstance() {
if ( !(self::$instance instanceof self) ){
self::$instance = new self();
}
return self::$instance;
}

//当前客户端连接之后要执行的方法
public function onOpen($server,$request) {
echo "client: {$request->fd}\n";
$server->push($request->fd, "hello, welcome\n");
}

//当客户端向服务器发送消息时要执行的方法
public function onMessage($server,$frame) {
//处理业务逻辑
echo "client: {$frame->data}\n";
$server->push($frame->fd, "server: {$frame->data}");
}

//当客户端和服务端断开连接时要执行的方法
public function onClose($server,$fd) {
echo "client-{$fd} is closed\n";
}

//启动webSocket方法
public static function start(){
self::$server->start();
}
}

SwooleWebSocket::getInstance()->start();
posted @   Mr丿Luo  阅读(290)  评论(0编辑  收藏  举报
编辑推荐:
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
阅读排行:
· Blazor Hybrid适配到HarmonyOS系统
· Obsidian + DeepSeek:免费 AI 助力你的知识管理,让你的笔记飞起来!
· 分享4款.NET开源、免费、实用的商城系统
· 解决跨域问题的这6种方案,真香!
· 一套基于 Material Design 规范实现的 Blazor 和 Razor 通用组件库
点击右上角即可分享
微信分享提示