IMI v0.0.7 用 Controller 开发 WebSocket/TCP/UDP 应用

宇润
 宇润
发布于 2018年07月30日
收藏 10

现在IMI可以像开发http应用一样,使用控制器-动作,WebSocket/TCP/UDP应用。IMI内置支持连接分组,仅仅需要十行代码,就构建出了一个简单的 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,服务器在美国,经不住攻击,大家正常玩就行~发现问题请及时告知我,非常感谢!

演示地址:http://chat-demo.imiphp.com:8084/

tcp聊天室demo及客户端代码,请查看imi-demo项目

v0.0.7 更新内容

  • 新增支持中间件+控制器开发WebSocket/TCP/UDP应用

  • 新增支持连接会话数据持久化

  • 新增获取分组中连接总数方法

  • 新增Redis分组redisDb属性指定数据库

  • 新增监听WorkerError事件

  • 开放一些BeanProxy方法

  • 模型生成支持视图

  • imi 服务器类中新增getSwoolePort()方法

  • 优化模型的字段、方法注释,加上数据库字段注释,更加方便理解

  • 优化数据库模型update/delete/save处理,现在当主键为null时,update/delete可能会抛出异常

  • 优化命名,将work改为worker

  • 优化Redis事务延迟收包处理

  • 连接数据持久化、连接分组Redis驱动心跳数据使用事务写入,防止极端情况

  • 补充服务器close事件的$reactorID参数

  • 提取获取进程ID的方法到工具类

  • 修复模型生成的前缀处理问题

  • 修复数据库查询对in和not in条件的处理错误

  • 修复Bean类缓存清除问题

介绍

IMI 是基于 Swoole 开发的协程 PHP 开发框架,拥有常驻内存、协程异步非阻塞IO等优点。

IMI 框架文档丰富,上手容易,致力于让开发者跟使用传统 MVC 框架一样顺手。

IMI 框架底层开发使用了强类型,易维护,性能更强。支持 Aop ,支持使用注解和配置文件注入,完全遵守 PSR-3、4、7、11、15、16 标准规范。

框架的扩展性强,开发者可以根据实际需求,自行开发相关驱动进行扩展。不止于框架本身提供的功能和组件!

我们认为一个框架不仅需要代码健壮、简单易用,文档也是十分重要,所以文档的完善是我们工作的重点,相信一个好的文档能够让你事半功倍!

欢迎有志之士加入我们,一起开发完善!技术好的贡献代码,文笔好的贡献文档,有好的想法也欢迎与我们交流!

官网:https://www.imiphp.com/
文档手册:https://doc.imiphp.com/

代码仓库:
码云:https://gitee.com/yurunsoft/IMI
Github:https://github.com/Yurunsoft/IMI

空项目:https://gitee.com/yurunsoft/empty-imi-demo
功能Demo:https://gitee.com/yurunsoft/imi-demo

本站文章除注明转载外,均为本站原创或编译。欢迎任何形式的转载,但请务必注明出处,尊重他人劳动共创开源社区。
转载请注明:文章转载自 开源中国社区 [http://www.oschina.net]
本文标题:IMI v0.0.7 用 Controller 开发 WebSocket/TCP/UDP 应用
加载中

最新评论(1

弄月
弄月
返回顶部
顶部