专栏首页Java猫说InChatV1.1.3版本使用说明公众号:Java猫说

InChatV1.1.3版本使用说明公众号:Java猫说

本文首发于本博客 猫叔的博客,转载请申明出处

2019年1月15号-InChat发布V1.1.3版本

InChat

一个轻量级、高效率的支持多端(应用与硬件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项目,并引入InChatMaven包,(注意,请不要使用与本项目相同的包目录)。

可能你只需要这样的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的自项目。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • InChatV1.1.2版本使用说明公众号:Java猫说

    创建一个空的Maven项目,并引入InChatMaven包,(注意,请不要使用与本项目相同的包目录)。

    Java猫说
  • 基于InChat的SpringBoot版本通讯聊天数据存储Demo,附带详细流程说明[InChat1.1.4]

    首先,感谢那些一直以来支持InChat的朋友们,你们可能是因为工作原因,或者自己的想法,或者自己的项目等等。

    Java猫说
  • 一个简单的Netty-EchoDemo

    官方案例地址:https://netty.io/4.1/xref/io/netty/example/echo/package-summary.html

    Java猫说
  • Spring Boot Web 开发相关总结

    首先, 在实体类的需要验证的字段上添加添加验证注解, 验证注解类主要在 validation-api-1.1.0.Final.jar 的 javax.valid...

    北漂的我
  • SpringBoot 处理异常的几种常见姿势

    这是目前很常用的一种方式,非常推荐。测试代码中用到了 Junit 5,如果你新建项目验证下面的代码的话,记得添加上相关依赖。

    Guide哥
  • SpringBoot 处理异常的几种常见姿势

    这是目前很常用的一种方式,非常推荐。测试代码中用到了 Junit 5,如果你新建项目验证下面的代码的话,记得添加上相关依赖。

    Java3y
  • 使用angular4和asp.net core 2 web api做个练习项目(一)

    这是一篇学习笔记. angular 5 正式版都快出了, 不过主要是性能升级. 我认为angular 4还是很适合企业的, 就像.net一样. 我用的是wind...

    solenovex
  • Unity Inspector面板常用的属性

    其它还有诸如 HelpURL 等,详情可参考 官方帮忙文档 https://docs.unity3d.com/ScriptReference/HeaderAtt...

    meteoric
  • Java基础(二)面向对象(上)

    coders
  • 如何站在使用者的角度来设计SDK-微信公众号开发SDK(消息处理)设计之抛砖引玉

    0.SDK之必备的基本素质 在项目中免不了要用到各种各样的第三方的sdk,在我现在的工作中就在公司内部积累了各种各样的的公共库(基于.net的,基于silver...

    blackheart

扫码关注云+社区

领取腾讯云代金券