内容简介:本文首发于本博客猫叔的博客,转载请申明出处
本文首发于本博客猫叔的博客,转载请申明出处
2019年1月15号-InChat发布V1.1.3版本
一个轻量级、高效率的支持多端(应用与硬件Iot)的异步网络应用通讯框架
v1.1.3版本使用说明
v1.1.0-alpha版本使用说明 InChatV1.1.2版本使用说明
历史更新说明
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接口的,目前与分布式无关
原先的 自我发送
, 点对点发送
, 群聊
, 异常处理
, HTTP接口
均与原来一样
原先的接口说明可以看上一版本: InChatV1.1.2版本使用说明
前端相关
这里你可以来到 InChat 的Front-End-Testing文档夹中的chat.html。
你可以直接使用,你进需要修改对应的对接IP即可。
如果你开了SSL加密,你的IP开头记得改为: wss://192.168.1.121:8090/ws
!!!
前端可以看原来的版本: InChatV1.1.2版本使用说明
关于数据库设计
当前一版不会固定大家的数据库设计,大家可以自己自由设计,同时搭上自己的项目,构建一个附带IM的自项目。
公众号:Java猫说
现架构设计(码农)兼创业技术顾问,不羁平庸,热爱开源,杂谈程序人生与不定期干货。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Just My Type
Simon Garfield / Profile Books / 2010-10-21 / GBP 14.99
What's your type? Suddenly everyone's obsessed with fonts. Whether you're enraged by Ikea's Verdanagate, want to know what the Beach Boys have in common with easy Jet or why it's okay to like Comic Sa......一起来看看 《Just My Type》 这本书的介绍吧!