本文首发于本博客 猫叔的博客,转载请申明出处
InChathtml
一个轻量级、高效率的支持多端(应用与硬件Iot)的异步网络应用通信框架
v1.1.0-alpha版本使用说明
InChatV1.1.2版本使用说明
1.1.2版本
发送通知消息
,获取在线用户数
,获取在线用户列表
,暂不支持用户自定义HTTP接口(对于传统web API咱们但愿用户用本身的框架与流程)enum
处理1.1.3版本
建立一个空的Maven项目,并引入InChatMaven包,(注意,请不要使用与本项目相同的包目录)。前端
可能你只须要这样的Maven依赖便可java
<dependencies> <dependency> <groupId>com.github.UncleCatMySelf</groupId> <artifactId>InChat</artifactId> <version>1.1.3</version> </dependency> </dependencies>
你只须要继承InChat的默认配置类InitNetty
便可,以下git
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加密功能
github
如何自定义证书?
#keytool -genkey -keysize 2048 -validity 365 -keyalg RSA -dnam e "CN=in-chat.cn" -keypass 123456 -storepass 123456 -keystore inchat.jks
web
keytool为JDK提供的生成证书工具redis
若是你试着本身建立了本身的证书,那么你须要去重写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,咱们须要实现一个自定义的枚举,你能够这样写:json
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的自项目。
现架构设计(码农)兼创业技术顾问,不羁平庸,热爱开源,杂谈程序人生与不按期干货。