篇幅较长,感谢阅读。
在我决定作开源是由于自身工做接触到大多数的项目都是基于开源大佬写的框架,自觉惭愧,工做以来一直忙于业务与功能实现,多多少少作过的几个项目也没能抽出部分好一点的功能业务Maven包什么的提供也同行使用或借鉴,这实在是有悖于本身的初心。javascript
决定作开源是今年(2018)7月末的时候,本身曾作的一个Iot项目刚刚被几个网上的朋友问到,并寻求源码,那么久作了一个Demo,并放到了GitHub上。html
以后感受应该作一个有本身情感注入的项目才行,而不是工做上的现实交易的项目,我想作一个属于本身的项目,有意义的项目。前端
当时还在创业阶段,给本身的时间也很少,因此能想到作什么也确实是想法有限,更重要的是时间也有限。java
谢谢一我的,让我有了一个Idea去作一个项目,她常常说工做后什么话都不能轻易说,偶尔没有本身的空间去抒发本身的情绪,当时想到的是作一个我的树洞的东西,可是那有点产品性,且有点很差给同行们借鉴。而我在创业时也刚恰好接触到netty,以后用netty作了一个Iot物联网项目,如今想到就是顺便提高本身的能力,将netty运用并熟悉掌握起来,作一个聊天室吧,一开始想法局限,就是一个在线聊天室。git
没错,一开始就是一个项目式的形式,我很快的完成了一个聊天的功能,并打了一个tag包。如今的地址是:demo。
下载地址:demogithub
我实现了用户登陆、聊天历史、随机用户名、异步数据写入等基本功能。
登陆是随机分配的用户名,聊天数据会缓存本地,channel断开(用户离线的时候就执行异步任务去存储数据,在登陆界面时就读取数据库数据)web
修复聊天记录功能,实现重复信息录入,完善前端页面,回车监听等,对于前版本的本地缓存Map类型选用错误,对重复数据没法存储数据库
用户注册登陆功能,系统聊天绑定用户,禁止二次登陆等,前端页面大改,用户登陆后,id和channel一一对应,当出现二次id登陆且channel不一样时,视为二次登陆。bootstrap
本人主导SUI Mobile构建仿微信样式页面版,使用时开F12手机界面,修改前端样式。小程序
TCP/IP软硬件通讯-单片机等应用的TCP通讯,Netty处理二进制图片发送聊天功能,前言说到的Iot物联网项目的功能添加。
MQTT协议软硬件通讯等,Iot物联网,这个暂时被提取为分支模块。
API调用Netty长连接执行发送消息(在线数、用户列表)详情地址
便可以以系统身份想在线channel发送数据。
到此,产品项目分支到一段落,到了这个时候项目已经积累了十多个参与者(QQ群:628793702),在QQ群贡献一些他们的建议与在工做中遇到的问题。
GitHub地址: InChat
A lightweight, efficient communication framework that supports chat and the Internet of Things(一个轻量级、高效率的支持聊天与物联网的通信框架)
感谢一个在成都的朋友提供的业务场景,须要小程序参与控制Iot物联网,并使用MQTT的场景。
本Demo是小程序端的Iot案例简单实现。
首先是配置修改,你能够在本分支的yml配置文件进行mqtt的配置,核心的参数是:
ssl: false # 使用ssl加密protocol: MQTT_WS_PAHO # MQTT MQTT_WS_MQTT(mqtts.js) MQTT_WS_PAHO(paho.js)
本项目使用的paho.js的mqtt链接形式,因此protocol要选择MQTT_WS_PAHO。项目目前是未加密的,启动ssl本案例暂时不能通信。
默认直接启动项目就好。
项目启动后的地址 :ws://192.168.1.121:8094/mqtt
ws、与后缀mqtt是com.myself.nettychat.bootstrap.AbstractBootstrapServer.java中的配置
你须要小程序开发者工具,并默认认定你是具有基本的小程序开发经验的开发者,这里省略部分的基本配置,你只须要将本分支中wechat-client文件夹中的文件彻底复制到你新建的小程序项目便可,调试状况下无需AppID
你须要注意的是pages/connect/connect.js中的第78行
var client = new MQTT.Client("ws://" + this.data.server_addr+"/mqtt", "clientId_" + Math.random().toString(36).substr(2));
这里就是小程序的链接地址配置,默认和项目启动的一致,你须要在小程序的链接页面填写你的
IP:端口
而后就链接成功了,接着你能够在subscribe页面订阅一个主题,本Demo是订阅TEST。
运行test中的com.myself.nettychat.MqttPublishSample,你须要修改为本机的配置,相似链接地址等
String broker = "ws://192.168.1.121:8094/mqtt";//地址
须要注意的是,你的topic也要与小程序订阅的主题一致哦!
运行测试用例,模拟硬件发送信息
回到小程序的message页面,你能够看到接收到了消息
针对小程序与单片机硬件执行Iot物联网通信(TCP/IP)的一套完整Demo。
一、启动项目,tcp监听成功
二、运行com.myself.nettychat.tcptest.TCPTestClient (记得先改ip或端口,若是你有修改的话)
三、运行PostMan,请求下方的API 进行通讯测试
小程序端选购售货机中的商品,点击购买(小程序API向Iot中心发送对应商品的开锁信息),Iot中心中转开锁信息给单片机,单片机接收信息打开对应的锁。
通讯机制:帧头+ID+数据类型+24把锁状态+crc校验+帧尾(能够按照需求进行定制)
com.myself.nettychat.config.TCPServerHandler (通讯接收的处理类)
http://localhost:8080/susu/back/get_channel_size GET
请求Iot中心,获取当前链接存活状态下的连接实例
{ "code": 200, "msg": "成功", "data": 1 }
http://localhost:8080/susu/back/get_channel_id_list GET
请求Iot中心,当前存活状态下的连接Id列表
{ "code": 200, "msg": "成功", "data": [ "F5690137563CC8" ] }
http://localhost:8080/susu/back/send_to_channel POST
参数
{ "code": 200, "msg": "成功", "data": "【发送成功】" }
本项目为InChat核心项目,服务端项目,以API形式做为对外功能,相似腾讯IM的服务端做用,本文也将着重讲解本项目的各个API,目前尚未嵌入Iot通讯模块,仅以WebSocket的聊天室做为初期发展,须要使用到Iot的朋友能够先去Master项目了解。
前端对接公告,目前推出API,请均已此文档说明的为主,其他API非正式版或测试版,误用
查看API列表
http://localhost:8080/susu/swagger-ui.html
POST http://loclhost:8080/susu/user/to_register
返回码 | 信息内容 | 备注 |
---|---|---|
200 | 成功 | |
555 | 参数错误 | |
556 | 用户名存在 |
仅API列表详情中的API处于可用状态,其他API请勿使用,暂未基本完成,使用请详看文档
一个基于WebRTC与netty相结合的语音与视频流通信项目。还在构建中,,,
因为构建为分支,是由于暂时不能所有融合在一块儿,不少场景暂时是独立的,因此我针对朋友们的建议,构建了不一样的分支项目,而且竟可能的实现其要求的功能。
这些分支不会被抛弃,我会在后期将他们整理到真正的正版项目中去。
感谢以上全部的沉淀!!!
项目如今已经开始了重构与业务代码的抽离,我将把以上的功能所有抽成一个InChat-Maven包,并配合SpringBoot快速开发集成。
InChat
A lightweight, efficient communication framework that supports chat and the Internet of Things(一个轻量级、高效率的支持聊天与物联网的通信框架)
从8月初到如今已经大约已经三个月了,因为一直没有时间与精力很好的维护这个项目,内心一直有所歉意。再次向每个关注过InChat项目的朋友表示抱歉。
从12月初,准确的说,应该是前几天开始,InChat已经开始进行合理的重构与演进设计,同时相关文档都会分享到GitHub上,与本人博客中。
例如想在已经开始设计的登陆模块。
开源IM项目-InChat登陆接口设计与实现(基于Netty)
正如上文中说到的,我很感谢女友一直以来的陪伴,做为程序猿来讲,是很珍贵的,不过这个项目的初衷是为了她而作的,然后能等到朋友与线上友人的支持真的是意料以外,再次很感谢各位热爱开源的朋友。
明天就是她的生日,我但愿把InChat继续维持下去,做为一个生日礼物必备的项目报告一直延续下去。
若是对本项目有兴趣的,能够加入QQ群:628793702,一块儿研究讨论学习。
若是以上有一些对你有所帮助的话,还请到GitHub对项目点个Star。感谢对每个开源者的支持!谢谢。
但愿本项目对你有所帮助,个人目标暂定,一个小众IM加物联网的开源通信项目。