前言

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

今天我们要做的demo就能帮我们做到这一点啦!!!

采用框架

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

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

需要了解SSM & SpringBoot 吗?

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

框架使用手册

关于详细的手册说明,大家可以看看官网的介绍:InChatV1.1.0版本使用说明

开始Demo搭建

构建一个空的Maven项目

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

com.github.UncleCatMySelfInChat1.1.0-alpha

对接两个接口与实现

一个是框架提供给我们用户进行数据保存与读取的,通过这个接口的实现,我们可以异步拿到每个聊天的通信数据。这里的InChatMessage是一个框架自定义的通信对象。

public class ToDataBaseServiceImpl implements InChatToDataBaseService{

@Override

public Boolean writeMapToDB(InChatMessage message) {

System.out.println(message.toString());

return true;

}

}

还有一个接口是对登录的校验(这里我们审理用户登录与校验模块,所以直接返回true即可),还有一个是返回群聊的数组信息。

public class verifyServiceImpl implements InChatVerifyService {

@Override

public boolean verifyToken(String token) {

//登录校验

return true;

}

@Override

public JSONArray getArrayByGroupId(String groupId) {

//根据群聊id获取对应的群聊人员ID

JSONArray jsonArray = JSONArray.parseArray("[\"1111\",\"2222\",\"3333\"]");

return jsonArray;

}

}

我们可以再详细的说下,获取群聊信息,是通过一个groupId来获取对应的用户Id数组,我们可以自己做一个数据查询。

核心的框架启动代码

直接上代码,然后我们再讲解一下。

public class DemoApplication {

public static void main(String[] args) {

//配置InChat配置工厂

ConfigFactory.inChatToDataBaseService = new ToDataBaseServiceImpl();

ConfigFactory.inChatVerifyService = new verifyServiceImpl();

//默认启动InChat

InitServer initServer = new InitServer(new InitNetty());

initServer.open();

//获取用户值

WebSocketChannelService webSocketChannelService = new WebSocketChannelService();

//启动新线程

new Thread(new Runnable() {

@Override

public void run() {

//设定默认服务器发送值

Map map = new HashMap<>();

map.put("server","服务器");

//获取控制台用户想发送的用户Token

Scanner scanner = new Scanner(System.in);

String token = scanner.nextLine();

//获取用户连接

Channel channel = (Channel) webSocketChannelService.getChannel(token);

//调用接口发送

webSocketChannelService.sendFromServer(channel,map);

}

}).start();

}

}

好了,以上已经基本完成了我们的聊天室Demo了,是不是很简单!?

首先,我们将实现的两个类,配置到框架的配置工厂中,然后启动框架即可,相关的类,都是框架提供的。下面的线程是一个框架的接口,以服务器第一人称发送给针对用户通知信息,输入“1111”,Demo演示的用户token值。

关于前端

对于这个前端页面,我们需要更改一下IP地址。

运行调试项目

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

INFO - 服务端启动成功【192.168.1.121:8090】

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

接着直接用浏览器打开chat.html的页面即可,关于js的方法,大家可以看看InChatV1.1.0版本使用说明。

运行效果如下:

INFO - 服务端启动成功【192.168.1.121:8090】

DEBUG - -Dio.netty.buffer.bytebuf.checkAccessible: true

DEBUG - Loaded default ResourceLeakDetector: io.netty.util.ResourceLeakDetector@68ad4247

INFO - [DefaultWebSocketHandler.channelActive]/192.168.1.121:17330链接成功

DEBUG - -Dio.netty.recycler.maxCapacityPerThread: 4096

DEBUG - -Dio.netty.recycler.maxSharedCapacityFactor: 2

DEBUG - -Dio.netty.recycler.linkCapacity: 16

DEBUG - -Dio.netty.recycler.ratio: 8

DEBUG - [id: 0xabb0dbad, L:/192.168.1.121:8090 - R:/192.168.1.121:17330] WebSocket version V13 server handshake

DEBUG - WebSocket version 13 server handshake key: JYErdeATDgbPmgK0mZ+IlQ==, response: YK9ZiJehNP+IwtlkpoVkPt94yWY=

DEBUG - Decoding WebSocket Frame opCode=1

DEBUG - Decoding WebSocket Frame length=31

INFO - [DefaultWebSocketHandler.textdoMessage.LOGIN]

DEBUG - Encoding WebSocket Frame opCode=1 length=33

DEBUG - Decoding WebSocket Frame opCode=1

DEBUG - Decoding WebSocket Frame length=43

INFO - [DefaultWebSocketHandler.textdoMessage.SENDME]

1111

DEBUG - Encoding WebSocket Frame opCode=1 length=28

INFO - 【异步写入数据】

InChatMessage{time=Mon Dec 24 10:03:00 CST 2018, type='sendMe', value='', token='1111', groudId='null', online='null', onlineGroup=null, one='null'}

DEBUG - Decoding WebSocket Frame opCode=1

DEBUG - Decoding WebSocket Frame length=56

INFO - [DefaultWebSocketHandler.textdoMessage.SENDTO]

1111

DEBUG - Encoding WebSocket Frame opCode=1 length=41

INFO - 【异步写入数据】

InChatMessage{time=Mon Dec 24 10:03:01 CST 2018, type='sendTo', value='', token='1111', groudId='null', online='2222', onlineGroup=null, one='2222'}

DEBUG - Decoding WebSocket Frame opCode=1

DEBUG - Decoding WebSocket Frame length=60

INFO - [DefaultWebSocketHandler.textdoMessage.SENDGROUP]

1111

DEBUG - Encoding WebSocket Frame opCode=1 length=59

INFO - 【异步写入数据】

InChatMessage{time=Mon Dec 24 10:03:02 CST 2018, type='sendGroup', value='', token='1111', groudId='2', online='null', onlineGroup=[2222, 3333], one='null'}

1111

DEBUG - Encoding WebSocket Frame opCode=1 length=22

java控制层创建websocket_用Java构建一个简单的WebSocket聊天室相关推荐

  1. 详细介绍附代码:使用jquery,和php文件构建一个简单的在线聊天室,通过ip显示googlemap

    最近学习了关于使用最为流行的jquery发送请求,在实践中以最为简单的聊天室作为测验的辅助工具,对相关网页开发有一个初步的认识,希望大家能够一起学习进步.        首先介绍一下相关文件信息和功能 ...

  2. Silverlight学习(一) 创建Silverlight项目,构建一个简单的Silverlight Demo

          今天我将开始我的Silverlight学习之旅.首先学会如何创建Silverlight项目并构建一个Silverlight简单的Hello World Demo. 创建项目   现在Sil ...

  3. java jsf_使用Java和JSF构建一个简单的CRUD应用

    java jsf 使用Okta的身份管理平台轻松部署您的应用程序 使用Okta的API在几分钟之内即可对任何应用程序中的用户进行身份验证,管理和保护. 今天尝试Okta. JavaServer Fac ...

  4. 使用Java和JSF构建一个简单的CRUD应用

    使用Okta的身份管理平台轻松部署您的应用程序 使用Okta的API在几分钟之内即可对任何应用程序中的用户进行身份验证,管理和保护. 今天尝试Okta. JavaServer Faces(JSF)是用 ...

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

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

  6. java网络编程,通过TCP,Socket实现多对一的局域网聊天室

    java网络编程,通过TCP,Socket实现多对一的局域网聊天室 可以实现多个客户端连接服务器,服务器接收到信息就会把信息广播到所有的客户端 这是服务器端的代码 View Code import j ...

  7. python构建知识图谱_NLP第20课:Neo4j 从入门到构建一个简单知识图谱

    Neo4j 对于大多数人来说,可能是比较陌生的.其实,Neo4j 是一个图形数据库,就像传统的关系数据库中的 Oracel 和 MySQL一样,用来持久化数据.Neo4j 是最近几年发展起来的新技术, ...

  8. Neo4j 从入门到构建一个简单知识图谱

    Neo4j 对于大多数人来说,可能是比较陌生的.其实,Neo4j 是一个图形数据库,就像传统的关系数据库中的 Oracel 和 MySQL一样,用来持久化数据.Neo4j 是最近几年发展起来的新技术, ...

  9. 基于PyTorch,如何构建一个简单的神经网络

    本文为 PyTorch 官方教程中:如何构建神经网络.基于 PyTorch 专门构建神经网络的子模块 torch.nn 构建一个简单的神经网络. 完整教程运行 codelab→ https://ope ...

最新文章

  1. MyBatis - 6.Spring整合MyBatis
  2. 使用tap和tun设备的方法
  3. setTimeout和setInterval实现定时器的区别
  4. 网络爬虫re模块的findall()函数
  5. 计算机机房用户不规则行为,网络及网管机房管理理论练习
  6. 全新的membership框架Asp.net Identity(1)——.Net membership的历史
  7. mini_Xception架构
  8. oracle存储过程可以回退吗,Navicat 运行 Oracle 存储过程示例
  9. yii第三方插件snoopy配置
  10. image 第二次使用就出错是怎么回事_第二次上机报告-RNA-seq (HISAT - SAMtools- StringTie - ballgown)amp;amp;Gene-Assembly
  11. python 截图 minicap_【Python】使用minicap对安卓手机快速截屏
  12. php 正态分布数据描述,啥?你的数据不呈正态分布,文章发不了:stata一键搞定...
  13. 【数学建模】数学建模学习4---动态规划(例题+matlab代码实现)
  14. RFID 工作频率的分类
  15. mysql网络数据库设计与开发6_MYSQL网络数据库设计与开发/秦凤梅/教材
  16. 幻想未来,助你成为人生赢家?
  17. SDK “iphoneos“ cannot be located
  18. 阿里面试官亲述:如何利用设计模式改善业务代码
  19. 贪吃蛇小游戏 (一)
  20. ROC曲线的含义以及画法

热门文章

  1. BE的完整形式是什么?
  2. 乐高机器人亮剑_2500名选手大比拼 全球机器人广州从化“亮剑”
  3. stl list 删除元素_删除所有出现的元素,并从列表中删除一些特定的元素。 C ++ STL...
  4. setseed_Java Random setSeed()方法与示例
  5. 查询附近的人——GEO
  6. 漫画:Java如何实现热更新?
  7. win10安装vmware tools + 无法拖拽文件解决
  8. servlet+JQuery ajax以json的形式的验证表单小实例
  9. windows安装双JDK并实现版本切换
  10. 2021 河南 高考成绩查询,2021河南高考成绩查询入口