这两周忙着公司开新项目,各种需求整理、表设计、框架搭建等等,也算是在正式项目上尝试使用imi了。空下来时间,为imi开发支持了WebSocket。 可以像开发http应用一样,使用控制器-动作,来处理不同的指令。仅仅需要十行代码,就构建出了一个简单的 WebSocket 聊天室,当然这里代码行数没有算定义类、方法等等的代码。 首先定义一个 WebSocket 路由,只有指定uri才可以握手。@WSConfig定义了接收和发送数据的编码解码类。 /**
* 测试
* @Controller
*/
class Index extends HttpController
{
/**
* 连接地址:ws://127.0.0.1:8083/
*
* @Action
* @Route("/")
* @WSConfig(parserClass=\Imi\Server\WebSocket\Parser\JsonArrayParser::class)
* @return void
*/
public function index()
{
// 握手处理,什么都不做,框架会帮你做好
}
} 真正的业务代码如下,根据@WSRoute配置的路由,如传过来是{"action":"login"}数据则进入login方法处理。下面的代码,还实现了连接分组及分组发送。 /**
* 数据收发测试
* @WSController
*/
class Test extends WebSocketController
{
/**
* 登录
*
* @WSAction
* @WSRoute({"action"="login"})
* @return void
*/
public function login($data)
{
ConnectContext::set('username', $data->username);
$this->server->joinGroup('g1', $this->frame->getFd());
return ['success'=>true];
}
/**
* 发送消息
*
* @WSAction
* @WSRoute({"action"="send"})
* @param
* @return void
*/
public function send($data)
{
$message = ConnectContext::get('username') . ':' . $data->message;
$this->server->groupCall('g1', 'push', $message);
}
} 由于这仅仅是一个演示 WebSocket 的 Demo,所以很多细节并没有考虑完善,但是依然掩盖不住 imi 的简单高效! 上面的代码在imi-demo项目中有完整的可以跑,当然你也可以直接进我搭建在双核+4G的老爷机上的演示。用了ngrok,服务器在美国,经不住攻击,大家正常玩就行~发现问题请及时告知我,非常感谢! 另外非常感谢swoole、swoft群里朋友们的热心测试(ddos),让我发现了很多问题并修复,非常感谢。 演示地址:http://chat-demo.imiphp.com:8084/ 更新内容
介绍IMI 是基于 Swoole 开发的协程 PHP 开发框架,拥有常驻内存、协程异步非阻塞IO等优点。 IMI 框架文档丰富,上手容易,致力于让开发者跟使用传统 MVC 框架一样顺手。 IMI 框架底层开发使用了强类型,易维护,性能更强。支持 Aop ,支持使用注解和配置文件注入,完全遵守 PSR-3、4、7、11、15、16 标准规范。 框架的扩展性强,开发者可以根据实际需求,自行开发相关驱动进行扩展。不止于框架本身提供的功能和组件! 我们认为一个框架不仅需要代码健壮、简单易用,文档也是十分重要,所以文档的完善是我们工作的重点,相信一个好的文档能够让你事半功倍! 欢迎有志之士加入我们,一起开发完善!技术好的贡献代码,文笔好的贡献文档,有好的想法也欢迎与我们交流! 官网:https://www.imiphp.com/ 代码仓库: 空项目:https://gitee.com/yurunsoft/empty-imi-demo |