内容简介:本文首发于本博客
本文首发于本博客 猫叔的博客 ,转载请申明出处
2019年1月15号-InChat发布V1.1.3版本
一个轻量级、高效率的支持多端(应用与硬件Iot)的异步网络应用通讯框架
v1.1.3版本使用说明
历史更新说明
1.1.2版本
- 捕获未注册链接断开异常,完善异常处理
- 修改项目启动流程,仿Selector启动模式
- 添加HTTP接口三个:
发送通知消息
,获取在线用户数
,获取在线用户列表
,暂不支持用户自定义HTTP接口(对于传统web API我们希望用户用自己的框架与流程) - 服务端发送通知接口改为
enum
处理
1.1.3版本
- 添加SSL加密,实现https与wss功能
- 接受用户自定义证书(浏览器信任与不信任均可以访问)
- InChat配置可改为分布式或着单机版
- 引入Redis,处理集群信息与消息互通
- 如果有生产需要或者个别需求,发现BUG,欢迎留言,项目会更新新的API
关于InChat的Maven依赖
- fastjson 》 1.2.53
- gson 》 2.8.5
- netty 》 4.1.32.Final
- commons-lang 》 3.5
- slf4j-log4j12 》 1.7.25
- jedis 》 3.0.1
创建项目
创建一个空的Maven项目,并引入 InChat Maven包,(注意,请不要使用与本项目相同的包目录)。
可能你只需要这样的Maven依赖即可
<dependencies> <dependency> <groupId>com.github.UncleCatMySelf</groupId> <artifactId>InChat</artifactId> <version>1.1.3</version> </dependency> </dependencies>
对接InChat的接口与实现
InChat启动参数可以自配置
你只需要继承InChat的默认配置类 InitNetty
即可,如下
public class MyInit extends InitNetty { /** 自定义启动监听端口 */ @Override public int getWebport() { return 8090; } /** 是否启动分布式 true-启动、false-不启动 */ @Override public Boolean getDistributed() { return true; } /** 是否启动加密功能 */ @Override public boolean isSsl() { return true; } }
请注意,分布式为测试版,所以暂不支持SSL加密,如果启动分布式请关闭SSL加密功能
如何自定义证书?
#keytool -genkey -keysize 2048 -validity 365 -keyalg RSA -dnam e "CN=in-chat.cn" -keypass 123456 -storepass 123456 -keystore inchat.jks
keytool为JDK提供的生成证书工具
- keysize 2048 密钥长度2048位(这个长度的密钥目前可认为无法被暴力破解)
- validity 365 证书有效期365天
- keyalg RSA 使用RSA非对称加密算法
- dname "CN=gornix.com" 设置Common Name为gornix.com,这是我的域名
- keypass 654321 密钥的访问密码为123456
- storepass 123456 密钥库的访问密码为123456(其实这两个密码也可以设置一样,通常都设置一样,方便记)
- keystore gornix.jks 指定生成的密钥库文件为inchat.jks
如果你试着自己创建了自己的证书,那么你需要去重写 InitNetty
中的几个信息: jksFile
, jksStorePassword
, jksCertificatePassword
。
你的jks文件只需要放到 resources
目录下就好,两个密码就是你之前设定相同的密码。
本项目已经提供了默认的 inchat.jks
,请用户在Maven包中复制并粘贴到自己的项目中的 resources
文件夹中即可。
获取聊天消息数据
此接口与原先一样,仅修改了方法名
public class DataBaseServiceImpl implements InChatToDataBaseService { @Override public Boolean writeMessage(InChatMessage message) { System.out.println(message.toString()); return true; } }
登录校验与群聊消息
此接口没有做过多的修改
public class VerifyServiceImpl implements InChatVerifyService { @Override public boolean verifyToken(String token) { return true; } @Override public JSONArray getArrayByGroupId(String groupId) { JSONArray jsonArray = JSONArray.parseArray("[\"1111\",\"2222\",\"3333\"]"); return jsonArray; } }
服务端发送通知消息枚举类
此接口具有Demo模板,用户需要继承InChat框架的 FromServerService
接口,同时该接口注释也有实例demo,我们需要实现一个自定义的枚举,你可以这样写:
public enum FromServerServiceImpl implements FromServerService { //你可以自定义自己的系统消息,请以Integer-String的形式 TYPE1(1,"【系统通知】您的账号存在异常,请注意安全保密信息。"), TYPE2(2,"【系统通知】恭喜您连续登录超过5天,奖励5积分。"); private Integer code; private String message; FromServerServiceImpl(Integer code, String message){ this.code = code; this.message = message; } public Integer getCode() { return code; } //实现接口的方法,遍历本枚举的code,获取对应的消息,作为系统消息发送 public String findByCode(Object code) { Integer codes = (Integer)code; for (FromServerServiceImpl item: FromServerServiceImpl.values()) { if (item.code == codes){ return item.message; } } return null; } public void setCode(Integer code) { this.code = code; } public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } }
启动项目
1.1.3版本的启动项目变得异常的简单,你只需要配置启动的配置工厂即可。但是如果我们启动了分布式的话,我们还需要配置 redis 信息。
public class application { public static void main(String[] args) { //配置你的自定义配置 ConfigFactory.initNetty = new MyInit(); //配置校验类 ConfigFactory.inChatVerifyService = new VerifyServiceImpl(); //配置消息接收处理类 ConfigFactory.inChatToDataBaseService = new DataBaseServiceImpl(); //配置服务端系统消息枚举,这里的值无所谓 TYPE1或者TYPE2或者TYPEN均可以 ConfigFactory.fromServerService = FromServerServiceImpl.TYPE1; //配置分布式Redis地址,端口目前默认的,下一版可以支持修改。 ConfigFactory.RedisIP = "192.168.192.132"; //启动InChat InitServer.open(); } }
项目效果
启动成功
DEBUG - -Dio.netty.threadLocalDirectBufferSize: 0 DEBUG - -Dio.netty.maxThreadLocalCharBufferSize: 16384 INFO - 服务端启动成功【192.168.56.1:8090】 INFO - [RedisConfig.getJedis]:连接成功,测试连接PING->PONG
如果你开通了分布式,那么你可以试着启动两个应用程序。
DEBUG - -Dio.netty.threadLocalDirectBufferSize: 0 DEBUG - -Dio.netty.maxThreadLocalCharBufferSize: 16384 INFO - 服务端启动成功【192.168.56.1:8070】 INFO - [RedisConfig.getJedis]:连接成功,测试连接PING->PONG
读者可以到项目中使用原来的 两个前端页面 。
分别登录两个用户在两个应用程序,并进行互相通信即可。 启动分布式请关闭SSL,分布式为测试版,暂不支持SSL
目前,分布式版本接通了点对点与群聊的功能,大家可以试试。下一版本会添加一个分布式的组件用来统一数据与接口功能。
关于加密的,请提前让电脑认同信任证书
关于分布式的操作效果
原先的 自我发送
, 点对点发送
, 群聊
, 异常处理
, HTTP接口
均与原来一样
原先的接口说明可以看上一版本: InChatV1.1.2版本使用说明
前端相关
这里你可以来到 InChat 的Front-End-Testing文档夹中的chat.html。
你可以直接使用,你进需要修改对应的对接IP即可。
wss://192.168.1.121:8090/ws
!!!
前端可以看原来的版本: InChatV1.1.2版本使用说明
关于数据库设计
当前一版不会固定大家的数据库设计,大家可以自己自由设计,同时搭上自己的项目,构建一个附带IM的自项目。
公众号:Java猫说
现架构设计(码农)兼创业技术顾问,不羁平庸,热爱开源,杂谈程序人生与不定期干货。
以上所述就是小编给大家介绍的《SSL加密与分布式IM系统-InChat1.1.3版本试用说明》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 分布式机器学习与同态加密-part2
- 分布式机器学习与同态加密-part1
- 亚马逊获得加密与分布式数据存储两项专利
- DOS与原力协议齐心协力,拓展分布式加密金融领域
- 亚马逊获得了加密和分布式数据存储解决方案的专利
- 加密原理详解:对称式加密 VS 非对称式加密
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
第一本Docker书 修订版
詹姆斯·特恩布尔 (James Turnbull) / 李兆海、刘斌、巨震 / 人民邮电出版社 / 2016-4-1 / CNY 59.00
Docker是一个开源的应用容器引擎,开发者可以利用Docker打包自己的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。 本书由Docker公司前服务与支持副总裁James Turnbull编写,是Docker开发指南。本书专注于Docker 1.9及以上版本,指导读者完成Docker的安装、部署、管理和扩展,带领读者经历从测试到生产的整个开发生......一起来看看 《第一本Docker书 修订版》 这本书的介绍吧!