idrunk/dce

DCE,一款具有分片中间件的网络编程框架

v4.6.3 2023-12-22 10:47 UTC

README

Dce是一款基于PHP8开发的网络编程框架,支持传统Cgi式Web编程及命令行工具编程,同时也支持Swoole下的常驻内存式Web编程与长连接服务器编程。它设计了一套通用的RCR架构来处理所有类型的网络编程,帮助您的应用项目保持清晰整洁,轻松编写出易于复用和维护的代码。

RCR架构流程图

Dce还拥有许多特色功能,其中最引人注目的是分库中间件,可轻松实现分库查询。除此之外,还提供负载均衡连接池、远程过程调用、ID生成器、并发锁、会话管理器等特色功能。这些功能依赖于Swoole,因此Dce的作者强烈推荐在Swoole下使用Dce,配合其多进程协程模式,可以将您的服务器性能发挥到极致。

当然,除了上述功能外,模型、校验器、缓存器、事件、查询器、活动记录等常规功能模块也一应俱全。

开始使用

获取

composer create-project idrunk/dce-app:@dev

示例代码

composer create-project idrunk/dce-app:dev-sample dce-sample

使用命令行工具

执行一个空命令

./dce
# 或者在windows下执行:
.\dce.bat
# 将响应:
#
# 你正在cli模式以空路径请求Dce接口

在Swoole支持的Linux下启动Websocket服务器

dce websocket start
# 将响应
# Websocket server started with 0.0.0.0:20461.

使用JS连接Websocket服务

const ws = new WebSocket('ws://127.0.0.1:20461');
ws.onopen = () => ws.send('');
ws.onmessage = msg => console.log(msg.data);
// 若连接成功,将在控制台打印出下述消息
/*
;{"data":{"info":"恭喜!服务端收到了你的消息并给你作出了回应"}}
*/

使用Redis连接池

RedisProxy会自动根据环境判断从实例池取用还是新建连接,如果使用实例池,则会自动进行取还。

RedisProxy::new()->set('homepage', 'https://drunkce.com');

数据库查询

进行分库查询时需要配置分库规则,但查询方法与普通查询相同,因此以下示例也适用于分库查询。

// 查一条
$row = db('member')->where('mid', 4100001221441)->find();
// db方法为实例化查询器的快捷方法

// 简单联合查询
$list = db('member', 'm')->join('member_role', 'mr', 'mr.mid = m.mid')->select();

// 较复杂的嵌套条件查询
$list = db('member')->where([
    ['is_deleted', 0],
    ['register_time', 'between', ['2021-01-01', '2021-01-31 23:59:59']],
    [
        ['level', '>', 60],
        'or',
        ['vip', '>', 1],
    ],
    ['not exists', raw('select 1 from member_banned where mid = member.mid')],
])->select();

通过上述简介,相信您对Dce已经有了一个初步了解。Dce的玩法远不止这些,您可以点击这里继续深入了解。