本文首發於本博客 貓叔的博客,轉載請申明出處html
InChat前端
一個輕量級、高效率的支持多端(應用與硬件Iot)的異步網絡應用通信框架java
1.1.2版本github
發送通知消息
,獲取在線用戶數
,獲取在線用戶列表
,暫不支持用戶自定義HTTP接口(對於傳統web API咱們但願用戶用本身的框架與流程)enum
處理1.1.3版本web
建立一個空的Maven項目,並引入InChatMaven包,(注意,請不要使用與本項目相同的包目錄)。redis
可能你只須要這樣的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加密功能
json
如何自定義證書?
#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的自項目。
現架構設計(碼農)兼創業技術顧問,不羈平庸,熱愛開源,雜談程序人生與不按期乾貨。