采用框架

我们整个Demo基本不需要大家花费太多时间,就可以实现以下的功能。

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

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

先看看效果

需要了解SSM & SpringBoot 吗?

InChat ,本身不依赖于任何的底层框架,所以大家只要会基本的Java语言就可以实现一套自己的WebSocket聊天室。

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

关于详细的手册说明,大家可以看看官网的介绍:

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

开始Demo搭建

构建一个空的Maven项目

我们不需要依赖其他的Maven包,只要本文提及的框架即可。

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

InChat启动参数可以自配置

你只需要继承InChat的默认配置类InitNetty即可,如下

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

获取聊天消息数据

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

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版本使用说明

新功能添加 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)

关于前端

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

用Java构建一个简单的WebSocket聊天项目之新增HTTP接口调度的更多相关文章

  1. 用Java构建一个简单的WebSocket聊天室

    前言 首先对于一个简单的聊天室,大家应该都有一定的概念了,这里我们省略用户模块的讲解,而是单纯的先说说聊天室的几个功能:自我对话.好友交流.群聊.离线消息等. 今天我们要做的demo就能帮我们做到这一 ...

  2. 构建一个简单的Spring Boot项目

    11 构建一个简单的Spring Boot项目 这个章节描述如何通过Spring Boot构建一个"Hello Word"web应用,侧重介绍Spring Boot的一些重要功能. ...

  3. 实现一个简单的WebSocket聊天室

    WebSocket 简介 WebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议. WebSocket 使得客户端和服务器之间的数据交换变得更加简单,允许服务端主 ...

  4. golang实现一个简单的websocket聊天室

    基本原理: 1.引入了 golang.org/x/net/websocket 包. 2.监听端口. 3.客户端连接时,发送结构体: {"type":"login" ...

  5. 构建一个简单的 Google Dialogflow 聊天机器人【上】

    概述 本教程将向您展示如何构建一个简单的Dialogflow聊天机器人,引导您完成Dialogflow的最重要功能.您将学习如何: 创建Dialogflow帐户和第一个Dialogflow聊天机器人, ...

  6. Ant—使用Ant构建一个简单的Java工程(两)

    博客<Ant-使用Ant构建一个简单的Java项目(一)>演示了使用Ant工具构建简单的Java项目,接着这个样例来进一步学习Ant: 上面样例须要运行多条ant命令才干运行Test类中的 ...

  7. 通过python 构建一个简单的聊天服务器

    构建一个 Python 聊天服务器 一个简单的聊天服务器 现在您已经了解了 Python 中基本的网络 API:接下来可以在一个简单的应用程序中应用这些知识了.在本节中,将构建一个简单的聊天服务器.使 ...

  8. 使用Servlet和JSP实现一个简单的Web聊天室系统

    1 问题描述                                                利用Java EE相关技术实现一个简单的Web聊天室系统,具体要求如下. (1)编写一个登录 ...

  9. struts1:(Struts重构)构建一个简单的基于MVC模式的JavaWeb

    在构建一个简单的基于MVC模式的JavaWeb 中,我们使用了JSP+Servlet+JavaBean构建了一个基于MVC模式的简单登录系统,但在其小结中已经指出,这种模式下的Controller 和 ...

随机推荐

  1. python 游戏(龙的国度)

    1. 理清楚游戏思路 实现功能:2个洞穴选择,一个洞穴是好龙,一个洞穴是坏龙,坏龙可以概率屠龙或者概率逃跑选项(后续难度需要增加宝藏获取装备,随机遇见商人,随着游戏进度逐步减少屠龙概率) 2. 计数和 ...

  2. DRF框架QQ登录功能

    用户模块---QQ登录 流程图 QQ登录文档:http://wiki.connect.qq.com/%E5%87%86%E5%A4%87%E5%B7%A5%E4%BD%9C_oauth2-0 流程简述 ...

  3. SQL邮件服务(解决各种疑难杂症)+案例 + 使用SQLserver 邮件系统发送SQL代理作业执行警告

    首先你需要知道你要做的几部: 1 每个数据库都有自己的 SERVICE BROKER 很多SQL SERVER内部服务依赖它 2 启动 SERVICE BROKER 需要 1 STOP 你的 SQL  ...

  4. MySQL数据库--外键约束及外键使用

    什么是主键.外键关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键. 比如: 学生表(学号,姓名,性别,班级) 其中每个学生的学号是唯 ...

  5. PAT甲题题解-1007. Maximum Subsequence Sum (25)-求最大子区间和

    题意:给出n个数,求最大连续的子区间和,并且输出该区间的第一个和最后一个数. 如果所有数都小于0,那么则输出0,第一个数和最后一个数. 看数据k的范围,就知道肯定不能两层for循环来求区间和,O(n^ ...

  6. PAT甲题题解-1027. Colors in Mars (20)-水。。。

    #include <iostream> #include <cstdio> #include <algorithm> #include <string.h&g ...

  7. 配置tomcat虚拟路径

    这个问题其实很简单,首先找到你安装的tomcat的路径然后,在Tomcat6.0/conf/Catalina路径下创建localhost文件夹,如果有,就不用创建,然后在该文件夹下创建一个xml文件, ...

  8. 【Alpha阶段】M1事后报告

    时间:2015-11-13 23:30 地点:七公寓一楼会议室 参与人员:窝窝头全体成员(王若愚因事请假) 设想和目标 我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述 ...

  9. 《Linux内核分析》 第六节 进程的描述和进程的创建

    <Linux内核分析> 第六节 进程的描述和进程的创建 20135307 张嘉琪 原创作品转载请注明出处 +<Linux内核分析>MOOC课程http://mooc.study ...

  10. IOS的开发演变历史

    对IOS开发平台一直抱有很大兴趣,正好通过这个机会好好了解一下IOS的开发历程! 通过一些查阅,我了解到IOS的开发平台主要是依靠Xcode软件来编写程序,同时又需要在MAC OS X的环境下运行,w ...