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

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 {/** 自定义启动监听端口 */@Overridepublic int getWebport() {return 8090;}/** 是否启动分布式 true-启动、false-不启动 */@Overridepublic Boolean getDistributed() {return true;}/** 是否启动加密功能 */@Overridepublic 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 {@Overridepublic Boolean writeMessage(InChatMessage message) {System.out.println(message.toString());return true;}
}
复制代码

登录校验与群聊消息

此接口没有做过多的修改

public class VerifyServiceImpl implements InChatVerifyService {@Overridepublic boolean verifyToken(String token) {return true;}@Overridepublic 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";//启动InChatInitServer.open();}}
复制代码

项目效果

启动成功

DEBUG - -Dio.netty.threadLocalDirectBufferSize: 0
DEBUG - -Dio.netty.maxThreadLocalCharBufferSize: 16384INFO - 服务端启动成功【192.168.56.1:8090】INFO - [RedisConfig.getJedis]:连接成功,测试连接PING->PONG
复制代码

如果你开通了分布式,那么你可以试着启动两个应用程序。

DEBUG - -Dio.netty.threadLocalDirectBufferSize: 0
DEBUG - -Dio.netty.maxThreadLocalCharBufferSize: 16384INFO - 服务端启动成功【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猫说

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

转载于:https://juejin.im/post/5c3d86e1e51d4539b927db37

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

  1. mysql5.7 skip ssl_MySQL 5.7 的SSL加密方法

    MySQL 5.7 的SSL加密方法 MySQL 5.7.6或以上版本 (1)创建证书开启SSL验证 --安装openssl yum install -y openssl openssl versio ...

  2. MySQL 5.7 have_ssl 的SSL加密方法

    MySQL 5.7 have_ssl 的SSL加密方法 MySQL 5.7.6或以上版本 (1)创建证书开启SSL验证 –安装openssl yum install -y openssl openss ...

  3. com.microsoft.sqlserver.jdbc.SQLServerException: 驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立 安全连接

    com.microsoft.sqlserver.jdbc.SQLServerException: 驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立 安全连接 驱动版本 最新 ...

  4. ftp连接oracle服务器,使用SSL加密连接FTP - 架建SSL安全加密的FTP服务器(图)_服务器应用_Linux公社-Linux系统门户网站...

    四.使用SSL加密连接FTP 启用Serv-U服务器的SSL功能后,就可以利用此功能安全传输数据了,但FTP客户端程序必须支持SSL功能才行. 如果我们直接使用IE浏览器进行登录则会出现图4显示的错误 ...

  5. MySQL:安装和基于SSL加密的主从复制(基于5.7)

    小生博客:http://xsboke.blog.51cto.com -------谢谢您的参考,如有疑问,欢迎交流 目录: --------mysql-5.7.13简介及安装 --------配置my ...

  6. 快速配置Windows 2003平台下实现 IIS(WEB)站点的安全(SSL加密技术!)

    [实验名称] 快速配置Windows 2003平台下实现 IIS(WEB)站点的安全(SSL加密技术!) [实验基本概念] A. 对于公用信息--------------------www.Sohu. ...

  7. ubuntu 12.04 配置vsftpd 服务,添加虚拟用户,ssl加密

    1.对于12.04的vsftpd 有一些bug,推荐安装版本vsftpd_2.3.5-1ubuntu2ppa1_amd64.deb apt-get install python-software-pr ...

  8. mysql8强制用户开启ssl_MySQL8开启ssl加密

    1 概述 MySQL从5.7开始默认开启SSL加密功能,进入MySQL控制台后输入status可以查看ssl的状态,出现下图表示在使用ssl: 另外,ssl加密需要密钥与证书,可以使用openssl手 ...

  9. 利用IPFS构建自己的去中心化分布式Wiki系统

    IPFS全称InterPlanetary File System,中文名:星际文件系统,是一个旨在创建持久且分布式存储和共享文件的网络传输协议. 它是一种内容可寻址的对等超媒体分发协议.在IPFS网络 ...

最新文章

  1. shell的C语言写法
  2. java实现zip的压缩和解压(支持中文文件名)
  3. FIREBIRD浅历
  4. ad19pcb所有元件都在报错_PLC的线圈输出和置复位,可以混用吗?很多人都会犯这个错误!...
  5. Educational Codeforces Round 80 (Rated for Div. 2) C. Two Arrays 组合数|dp
  6. python 正则表达式判断字符串是否为回文_JS使用栈判断给定字符串是否是回文算法示例...
  7. 《恋上数据结构第1季》二叉堆实现优先级队列
  8. golang byte转string_golang面试题:怎么避免内存逃逸?
  9. eclipse debug 的断点查看和清除
  10. correlation 蒙特卡洛_蒙特卡洛模拟法
  11. 路由器PPPoE拨号密码(ADSL密码)找出方法 ZT
  12. Spire.Office for Java 7.5.4
  13. l2逐笔接口更新的频率是多少?
  14. 小米扫地机器人粉尘盒_小米扫地机器人尘盒怎么打开
  15. 项目4-一元一次方程类
  16. 学的计算机专业但是键盘打字非常慢怎么办,win10系统下键盘打字反应慢迟钝的解决方法...
  17. linux deploy目录形式,安装Linux Deploy
  18. 【汽车总线技术】CAN和CAN FD总线故障诊断
  19. 机器学习工具包SHOGUN用户文档翻译完成
  20. 方正中间件SOA解决方案(下)

热门文章

  1. 金融粉去哪里引流?哪个平台做金融引流好?贴吧精准引流金融粉技巧
  2. 高效运维的本质:可视化的服务交付和可视化的服务度量
  3. 【自动化测试】Pytest+Appium+Allure 做 UI 自动化的那些事
  4. linux环境下conda更改pkg和env缓存路径
  5. 2022-2028年中国垃圾处理行业全景调研及投资前景建议报告
  6. HJY-E2B/4J、HJY-91A/8J电压继电器
  7. abap新语法(一)
  8. uniapp mx-datepicker时间范围选择器禁用部分时间
  9. win10下装黑苹果双系统_电脑笔记本win10系统重装一体机W7苹果mac双系统远程维修8虚拟机...
  10. 精选 2021 年大厂高频 Java 面试真题集锦(含答案),面试一路开挂