查看原文
其他

花十分钟时间给 JFinal 写了个 talent-aio 插件

2017-03-24 小徐同学 开源中国


本人  JFinal 脑残粉,最近公司几个项目都需要跟硬件交互,这就得用到长连接,之前一直没接触过该领域,本来还想花时间研究下netty,讲真挺难啃的,找资料的时候翻到 talent-aio,略微了解发现似乎学习成本极低,没想到作者本人也极其nice,解答我这个门外小伙子好多个问题,顺利用上此框架,刚好解了我的燃眉之急。


什么是 talent-aio? talent-aio是基于java aio实现的即时通讯框架,源于作者另一个久经考验的talent-nio框架,但在易用性、性能及代码可读性方面又远远超越了talent-nio。


顺便放上传送门:

https://my.oschina.net/talenttan/blog/863545


废话不说,下面正题:


1


下载talent-aio的demo,demo极其简单,主要还是看HelloAbsAioHandler这个类的编码协议,剩下的就是看Aio的类了,api 貌似都在这。具体不介绍了,上面有链接,要注意的是Client端与Server端协议要一致。在这里说下我之前踩的坑,比如talent-aio的demo代码中的协议是有header的,Server端对客户端没有要求,但必须遵循交互协议,所以若是你用百度出来的socket实例连Server要注意,这里我们用回本身提供的Client代码就可以了。


2


导入talnet-aio依赖。



3


怎么整合到JFinal上去呢?我们只要将talent-aio的server端在JFinal启动的时候顺便也启动起来就ok了。得益JFinal 插件扩展极其方便(说的这里很感谢波总), 过程也极其简单,让HelloServerStarter实现JFinal的IPlugin接口就ok 了。



4


这里为了方便我把demo的代码copy过来了,具体环境中看个人操作,不多说。



5


然后我们在MainConfig中 加入这个插件就可以了。



6


启动结果如下:


7



8


右键执行 HelloClientStarter,会发现服务器收到了信息,客户端也收到了服务器返回的信息。


● 客户端:收到消息:收到了你的消息,你的消息是:hello world


● 服务器:收到消息:hello world

当然业务需求肯定没简单,这里我弄了个简单常用的功能场景。客户端连接上来后,服务器保存起这个客户,Controller收到业务请求,需要发送信息给指定客户端。 实现方式如下:


● 在 HelloServerAioHandler 中,客户端连进来的时候用Aio.bindUser(channelContext, userid)这个方法把用户存起来,这里我写死1234,实际应该是根据IP或者发送信息来确定。


然后在中Controller调用Aio.sendToUser(HelloServerStarter.serverGroupContext, getPara(), hello); 发送消息给该客户端。


启动项目访问http://localhost/aio/1234,客户端就能收到信息。



● 总结:这是我第一次写博文,有什么写得不好的请多笑纳,也是希望能帮到有同样需求的人。


附上代码:

http://git.oschina.net/ybyxzxhw/JFinalMavenDemo




推荐阅读

Javascript 常用的设计模式详解

长 URL 转短连接的简单设计与实现

自制“神器”,2017 最新 Web 开发者成长路线图

基于 vue2 + vuex 构建一个具有 45 个页面的大型单页面应用

点击“阅读原文”查看更多精彩内容

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存