用Java构建一个简单的WebSocket聊天项目之新增HTTP接口调度

采用框架

咱们整个Demo基本不须要你们花费太多时间,就能够实现如下的功能。html

  • 用户token登陆校验
  • 自我聊天
  • 点对点聊天
  • 群聊
  • 获取在线用户数与用户标签列表
  • 发送系统通知

首先,咱们须要介绍一下咱们今天打算采用的框架,InChat : 一个轻量级、高效率的支持多端(应用与硬件Iot)的异步网络应用通信框架,采用这个框架,咱们基本上只须要两三个类就能够实现咱们今天须要的功能了。前端

先看看效果

 

demo

 

 

log

 

 

postman

 

 

send

 

须要了解SSM & SpringBoot 吗?

InChat ,自己不依赖于任何的底层框架,因此你们只要会基本的Java语言就能够实现一套本身的WebSocket聊天室。java

框架使用手册(新版V1.1.2刚刚发布)

关于详细的手册说明,你们能够看看官网的介绍:git

<dependency>
    <groupId>com.github.UncleCatMySelf</groupId>
    <artifactId>InChat</artifactId>
    <version>1.1.2</version>
</dependency>
复制代码

开始Demo搭建

构建一个空的Maven项目

咱们不须要依赖其余的Maven包,只要本文说起的框架便可。github

<dependency>
    <groupId>com.github.UncleCatMySelf</groupId>
    <artifactId>InChat</artifactId>
    <version>1.1.2</version>
</dependency>
复制代码

InChat启动参数能够自配置

你只须要继承InChat的默认配置类InitNetty便可,以下web

public class MyInit extends InitNetty { /** 自定义启动监听端口 */ @Override public int getWebport() { return 8090; } } 复制代码

获取聊天消息数据

此接口与原先同样,仅修改了方法名json

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.2版本的启动项目变得异常的简单,你只须要配置启动的配置工厂便可。安全

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; //启动InChat InitServer.open(); } } 复制代码

项目效果

启动成功

DEBUG - -Dio.netty.threadLocalDirectBufferSize: 0 DEBUG - -Dio.netty.maxThreadLocalCharBufferSize: 16384 INFO - 服务端启动成功【192.168.56.1:8090】 复制代码

当聊天链接未注册状况下,客户端自动断开后,服务会自动包对应的异常

INFO - [Handler:channelInactive]/192.168.56.1:8090关闭成功 ERROR - [捕获异常:NotFindLoginChannlException]-[Handler:channelInactive] 关闭未正常注册连接! 复制代码

原先的自我发送,点对点发送,群聊均与原来同样

原先的接口说明能够看上一版本: v1.1.0-alpha版本使用说明

 

new

 

 

log

 

新功能添加 HTTP

新增HTTP接口三个,在你启动Inchat的时候,默认启动,对于你的其余web API并没有任何影响,它是一个IM的辅助做用。本版本不支持用户自定义相关的InChat HTTP接口

获取在线用户数

  • 地址:[ip:端口]/get_size GET
  • 返回值
{
    "code": 200, "data": { "online": 1,//当前在线数 "time": "Jan 3, 2019 10:06:45 PM"//查询时间 } } 复制代码

获取在线用户标识

  • 地址:[ip:端口]/get_list GET
  • 返回值
{
    "code": 200, "data": { //返回在线用户列表 "tokens": [ "1111" ] } } 复制代码

根据用户标签,发送系统指定消息

  • 地址:[ip:端口]/send_from_server POST
  • 参数:token(你能够从get_list中获得在线用户标签)、value(你在系统中添加枚举的code值,这里不接受字符串)
  • 返回值
{
    "code": 400, "data": { "message": "通知发送成功" } } 复制代码

(有个小BUG,返回值code应该是200)

 

send

 

 

result

 

关于前端

InChat : 一个轻量级、高效率的支持多端(应用与硬件Iot)的异步网络应用通信框架,你们能够直接来这个项目下获取前端页面,或者直接访问这个地址:github.com/UncleCatMyS…

对于这个前端页面,咱们须要更改一下IP地址

运行调试项目

接下来直接启动后端项目,当咱们看到如下的信息,则项目启动成功。

INFO - 服务端启动成功【192.168.1.121:8090】
复制代码

这里的IP须要更换如下读者启动后的IP地址。

接着直接用浏览器打开chat.html的页面便可,关于js的方法,你们能够看看InChatV1.1.0版本使用说明

运行效果已经提早展现啦!

做者:Java猫说连接:https://juejin.im/post/5c2ebdfe5188252584691825

相关文章
相关标签/搜索