SSL加密与分布式IM系统-InChat1.1.3版本试用说明

栏目: 后端 · 发布时间: 5年前

内容简介:本文首发于本博客

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

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

SSL加密与分布式IM系统-InChat1.1.3版本试用说明

InChat

一个轻量级、高效率的支持多端(应用与硬件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

目前,分布式版本接通了点对点与群聊的功能,大家可以试试。下一版本会添加一个分布式的组件用来统一数据与接口功能。

关于加密的,请提前让电脑认同信任证书

SSL加密与分布式IM系统-InChat1.1.3版本试用说明

关于分布式的操作效果

SSL加密与分布式IM系统-InChat1.1.3版本试用说明

关于HTTP接口的,目前与分布式无关

原先的 自我发送 , 点对点发送 , 群聊异常处理 , HTTP接口 均与原来一样

原先的接口说明可以看上一版本: InChatV1.1.2版本使用说明

SSL加密与分布式IM系统-InChat1.1.3版本试用说明

SSL加密与分布式IM系统-InChat1.1.3版本试用说明

前端相关

这里你可以来到 InChat 的Front-End-Testing文档夹中的chat.html。

你可以直接使用,你进需要修改对应的对接IP即可。

如果你开了SSL加密,你的IP开头记得改为: wss://192.168.1.121:8090/ws !!!

前端可以看原来的版本: InChatV1.1.2版本使用说明

关于数据库设计

当前一版不会固定大家的数据库设计,大家可以自己自由设计,同时搭上自己的项目,构建一个附带IM的自项目。

公众号:Java猫说

现架构设计(码农)兼创业技术顾问,不羁平庸,热爱开源,杂谈程序人生与不定期干货。

SSL加密与分布式IM系统-InChat1.1.3版本试用说明


以上所述就是小编给大家介绍的《SSL加密与分布式IM系统-InChat1.1.3版本试用说明》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Beginning XSLT 2.0

Beginning XSLT 2.0

Jeni Tennison / Apress / 2005-07-22 / USD 49.99

This is an updated revision of Tennison's "Beginning XSLT", updated for the new revision of the XSLT standard. XSLT is a technology used to transform an XML document with one structure into another ......一起来看看 《Beginning XSLT 2.0》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

html转js在线工具
html转js在线工具

html转js在线工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换