本文首发于本博客 猫叔的博客,转载请申明出处
一个轻量级、高效率的支持多端(应用与硬件Iot)的异步网络应用通讯框架
1.1.2版本
发送通知消息
,获取在线用户数
,获取在线用户列表
,暂不支持用户自定义HTTP接口(对于传统web API我们希望用户用自己的框架与流程)enum
处理1.1.3版本
创建一个空的Maven项目,并引入InChatMaven包,(注意,请不要使用与本项目相同的包目录)。
可能你只需要这样的Maven依赖即可
<dependencies>
<dependency>
<groupId>com.github.UncleCatMySelf</groupId>
<artifactId>InChat</artifactId>
<version>1.1.3</version>
</dependency>
</dependencies>
你只需要继承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提供的生成证书工具
如果你试着自己创建了自己的证书,那么你需要去重写
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的自项目。