万事开头难
在我决定做开源是因为自身工作接触到大多数的项目都是基于开源大佬写的框架, 自觉惭愧, 工作以来一直忙于业务与功能实现, 多多少少做过的几个项目也没能抽出部分好一点的功能业务 Maven 包什么的提供也同行使用或借鉴, 这实在是有悖于自己的初心.
决定做开源是今年(2018)7 月末的时候, 自己曾做的一个 Iot 项目刚刚被几个网上的朋友问到, 并寻求源码, 那么久做了一个 Demo, 并放到了 GitHub 上.
之后感觉应该做一个有自己情感注入的项目才行, 而不是工作上的现实交易的项目, 我想做一个属于自己的项目, 有意义的项目.
当时还在创业阶段, 给自己的时间也不多, 所以能想到做什么也确实是想法有限, 更重要的是时间也有限.
谢谢一个人, 让我有了一个 Idea 去做一个项目, 她经常说工作后什么话都不能轻易说, 偶尔没有自己的空间去抒发自己的情绪, 当时想到的是做一个个人树洞的东西, 但是那有点产品性, 且有点不好给同行们借鉴. 而我在创业时也刚刚好接触到 netty, 之后用 netty 做了一个 Iot 物联网项目, 现在想到就是顺便提升自己的能力, 将 netty 运用并熟悉掌握起来, 做一个聊天室吧, 一开始想法局限, 就是一个在线聊天室.
初始项目演进
没错, 一开始就是一个项目式的形式, 我很快的完成了一个聊天的功能, 并打了一个 tag 包. 现在的地址是: https://github.com/UncleCatMySelf/InChat/tree/demo .
下载地址: demo https://github.com/UncleCatMySelf/InChat/releases
1.0.0 版本详情介绍 https://segmentfault.com/a/1190000016615063
我实现了用户登录, 聊天历史, 随机用户名, 异步数据写入等基本功能.
登录是随机分配的用户名, 聊天数据会缓存本地, channel 断开(用户离线的时候就执行异步任务去存储数据, 在登录界面时就读取数据库数据)
[图片上传失败...(image-22c496-1543989196979)]
[图片上传失败...(image-ba983e-1543989196979)]
1.2.0 版本
修复聊天记录功能, 实现重复信息录入, 完善前端页面, 回车监听等, 对于前版本的本地缓存 Map 类型选用错误, 对重复数据无法存储
[图片上传失败...(image-433d50-1543989196979)]
[图片上传失败...(image-dd3aac-1543989196979)]
1.3.0 版本
用户注册登录功能, 系统聊天绑定用户, 禁止二次登录等, 前端页面大改, 用户登录后, id 和 channel 一一对应, 当出现二次 id 登录且 channel 不同时, 视为二次登录.
[图片上传失败...(image-5f60fa-1543989196979)]
[图片上传失败...(image-a87f3e-1543989196979)]
[图片上传失败...(image-820706-1543989196979)]
1.4.1 版本
本人主导 SUI Mobile 构建仿微信样式页面版, 使用时开 F12 手机界面, 修改前端样式.
[图片上传失败...(image-6e56b7-1543989196979)]
1.5.2 版本
TCP/IP 软硬件通信 - 单片机等应用的 TCP 通信, Netty 处理二进制图片发送聊天功能, 前言说到的 Iot 物联网项目的功能添加.
[图片上传失败...(image-5f34f9-1543989196979)]
1.5.8 版本
MQTT 协议软硬件通信等, Iot 物联网, 这个暂时被提取为分支模块.
1.6.0 版本
API 调用 Netty 长链接执行发送消息 (在线数, 用户列表) 详情地址 https://segmentfault.com/a/1190000016603392
即可以以系统身份想在线 channel 发送数据.
[图片上传失败...(image-43d44c-1543989196979)]
[图片上传失败...(image-4acb7a-1543989196979)]
到此, 产品项目分支到一段落, 到了这个时候项目已经积累了十多个参与者(QQ 群: 628793702), 在 QQ 群贡献一些他们的建议与在工作中遇到的问题.
GitHub 地址: https://github.com/UncleCatMySelf/InChat
A lightweight, efficient communication framework that supports chat and the Internet of Things(一个轻量级, 高效率的支持聊天与物联网的通讯框架)
分支开启之路
paho-mqtt 分支
感谢一个在成都的朋友提供的业务场景, 需要小程序参与控制 Iot 物联网, 并使用 MQTT 的场景.
本 Demo 是小程序端的 Iot 案例简单实现.
服务端配置
首先是配置修改, 你可以在本分支的 YAML 配置文件进行 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.
Image text
Java 模拟 MQtt 客户端
运行 test 中的 com.myself.nettychat.MqttPublishSample, 你需要修改成本机的配置, 类似连接地址等
String broker = "ws://192.168.1.121:8094/mqtt";// 地址
需要注意的是, 你的 topic 也要与小程序订阅的主题一致哦!
运行测试用例, 模拟硬件发送信息
Image text
Image text
测试
回到小程序的 message 页面, 你可以看到接收到了消息
Image text
tcp-wechat
项目介绍
针对小程序与单片机硬件执行 Iot 物联网通讯 (TCP/IP) 的一套完整 Demo.
启动流程
1, 启动项目, tcp 监听成功
2, 运行 com.myself.nettychat.tcptest.TCPTestClient (记得先改 ip 或端口, 如果你有修改的话)
3, 运行 PostMan, 请求下方的 API 进行通信测试
Demo 场景
小程序端选购售货机中的商品, 点击购买(小程序 API 向 Iot 中心发送对应商品的开锁信息),Iot 中心中转开锁信息给单片机, 单片机接收信息打开对应的锁.
通信机制: 帧头 + ID + 数据类型 + 24 把锁状态 + crc 校验 + 帧尾(可以按照需求进行定制)
- com.myself.nettychat.config.TCPServerHandler (通信接收的处理类)
- API(小程序调用接口)
- http://localhost:8080/susu/back/get_channel_size GET
请求 Iot 中心, 获取当前连接存活状态下的链接实例
- {
- "code": 200,
- "msg": "成功",
- "data": 1
- }
- GET
请求 Iot 中心, 当前存活状态下的链接 Id 列表
- {
- "code": 200,
- "msg": "成功",
- "data": [
- "F5690137563CC8"
- ]
- }
- http://localhost:8080/susu/back/send_to_channel POST
参数
- channelId // 第二个 API 获取到的链接 Id
- lock // 将要打开的第几把锁 1-24(看单片机接入的锁的数量)
- {
- "code": 200,
- "msg": "成功",
- "data": "[发送成功]"
- }
- im-API
简介
本项目为 InChat 核心项目, 服务端项目, 以 API 形式作为对外功能, 类似腾讯 IM 的服务端作用, 本文也将着重讲解本项目的各个 API, 目前还没有嵌入 Iot 通信模块, 仅以 webSocket 的聊天室作为初期发展, 需要使用到 Iot 的朋友可以先去 Master 项目了解.
swagger-ui
前端对接公告, 目前推出 API, 请均已此文档说明的为主, 其余 API 非正式版或测试版, 误用
查看 API 列表
http://localhost:8080/susu/swagger-ui.html
API 列表详情
1, 账号注册
POST http://loclhost:8080/susu/user/to_register
参数: username(用户名)
参数: password(密码)
前端 Tip: 传值判断, 参数均不能为空, 密码限制在前端做判断
返回码与信息值
返回码 | 信息内容 | 备注 |
---|---|---|
200 | 成功 | |
555 | 参数错误 | |
556 | 用户名存在 |
提示
仅 API 列表详情中的 API 处于可用状态, 其余 API 请勿使用, 暂未基本完成, 使用请详看文档
webrtc
一个基于 WebRTC 与 netty 相结合的语音与视频流通讯项目. 还在构建中,,,
Image text
关于分支的想法
由于构建为分支, 是因为暂时不能全部融合在一起, 很多场景暂时是独立的, 所以我针对朋友们的建议, 构建了不同的分支项目, 并且竟可能的实现其要求的功能.
这些分支不会被抛弃, 我会在后期将他们整理到真正的正版项目中去.
InChat 雏形
感谢以上所有的沉淀!!!
项目现在已经开始了重构与业务代码的抽离, 我将把以上的功能全部抽成一个 InChat-Maven 包, 并配合 SpringBoot 快速开发集成.
- https://github.com/UncleCatMySelf/InChat
- A lightweight, efficient communication framework that supports chat and the Internet of Things(一个轻量级, 高效率的支持聊天与物联网的通讯框架)
微信图片_20181123151842.PNG
从 8 月初到现在已经大约已经三个月了, 由于一直没有时间与精力很好的维护这个项目, 心里一直有所歉意. 再次向每一个关注过 InChat 项目的朋友表示抱歉.
从 12 月初, 准确的说, 应该是前几天开始, InChat 已经开始进行合理的重构与演进设计, 同时相关文档都会分享到 GitHub 上, 与本人博客中.
微信图片_20181123153533.PNG
例如想在已经开始设计的登录模块.
开源 IM 项目 - InChat 登录接口设计与实现(基于 Netty) https://www.imooc.com/article/263797
一个不情之请
正如上文中说到的, 我很感谢女朋友一直以来的陪伴, 作为程序猿来说, 是很珍贵的, 不过这个项目的初衷是为了她而做的, 而后能等到朋友与线上友人的支持真的是意料之外, 再次很感谢各位热爱开源的朋友.
明天就是她的生日, 我希望把 https://github.com/UncleCatMySelf/InChat 继续维持下去, 作为一个生日礼物必备的项目报告一直延续下去.
如果以上有一些对你有所帮助的话, 还请到 GitHub 对项目点个 Star. 感谢对每一个开源者的支持! 谢谢.
希望本项目对你有所帮助, 我的目标暂定, 一个小众 IM 加物联网的开源通讯项目.
1787897575-5b6fb1bf2b46f_articlex.PNG
来源: http://www.jianshu.com/p/98bdcb5df096