IMI v0.0.6:十行代码构建简易的 WebSocket 聊天室

栏目: 后端 · 发布时间: 6年前

内容简介:这两周忙着公司开新项目,各种需求整理、表设计、框架搭建等等,也算是在正式项目上尝试使用imi了。空下来时间,为imi开发支持了WebSocket。可以像开发http应用一样,使用控制器-动作,来处理不同的指令。仅仅需要十行代码,就构建出了一个简单的 WebSocket 聊天室,当然这里代码行数没有算定义类、方法等等的代码。

IMI v0.0.6:十行代码构建简易的 WebSocket 聊天室

这两周忙着公司开新项目,各种需求整理、表设计、框架搭建等等,也算是在正式项目上尝试使用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/

更新内容

  • 新增支持使用控制器开发WebSocket服务

  • 新增支持WebSocket连接逻辑分组

  • 新增Http路由匹配缓存机制

  • 现在Session::get()方法不传参数时,返回全部数据

  • 新增 PHP 内置Session的序列化和反序列化实现

  • Session支持a.b.c形式参数,Session::get('a.b.c')同Session::get('a')['b']['c']

  • 新增支持Session Prefix前缀

  • 支持在非RequestContext环境下使用PoolManager::use()方法

  • 调整RequestContext中的container为按需实例化

  • 同步 Redis 连接方式默认timeout改为68年(绝对够用!flag!)

  • 修复AtomicManager::sub()参数无默认值问题

  • 修复并发访问时,类似Session加载会出错的问题

  • 修复LazyArrayObject类问题

  • 修正设置进程名称的错误位置

  • 修正一个方法拼写错误

  • 解决BeanFactory中可能存在的变量名重复问题

  • 优化延迟收包recv()执行逻辑

  • 服务器事件修改优化

  • 调整Bean类实例化eval()改为include 缓存文件

介绍

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


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

你也能看得懂的Python算法书

你也能看得懂的Python算法书

王硕,董文馨,张舒行,张洁 著 / 电子工业出版社 / 2018-11-1 / 59.00

编程的核心是算法,学习算法不仅能教会你解决问题的方法,而且还能为你今后的发展提供一种可能。 《你也能看得懂的Python算法书》面向算法初学者,首先介绍当下流程的编程语言Python,详细讲解Python语言中的变量和循序、分支、循环三大结构,以及列表和函数的使用,为之后学习算法打好基础。然后以通俗易懂的语言讲解双指针、哈希、深度优先、广度优先、回溯、贪心、动态规划和至短路径等经典算法。 ......一起来看看 《你也能看得懂的Python算法书》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具