Java互联网实时聊天系统(附源码)

0. 前言

决定以Netty为核心,以WebSocket为应用层通信协议做一个互联网聊天系统,整体而言就像微信网页版一样,但考虑到这个聊天系统的功能非常多,因此只打算实现核心的聊天功能,包括单发、群发、文件发送,然后把项目与Spring整合做成开源、可拓展的方式,给大家参考、讨论、使用,欢迎大家的指点。

关于Netty

Netty 是一个利用 Java 的高级网络的能力,隐藏其背后的复杂性而提供一个易于使用的 API 的客户端/服务器框架。

关于WebSocket通信协议

WebSocket是为了解决HTTP协议中通信只能由客户端发起这个弊端而出现的,WebSocket基于HTTP5协议,借用HTTP进行握手、升级,能够做到轻量的、高效的、双向的在客户端和服务端之间传输文本数据。

1、技术准备

  • IDE:MyEclipse 2016

  • JDK版本:1.8.0_121

  • 浏览器:谷歌浏览器、360浏览器(极速模式)(涉及网页前端设计,后端开发表示很苦闷)

  • 涉及技术:
    • Netty 4

    • WebSocket + HTTP

    • Spring MVC + Spring

    • JQuery

    • Bootstrap 3 + Bootstrap-fileinput

    • Maven 3.5

    • Tomcat 8.0

2. 整体说明

2.1 设计思想

整个通信系统以Tomcat作为核心服务器运行,其下另开一个线程运行Netty WebSocket服务器,Tomcat服务器主要处理客户登录、个人信息管理等的HTTP类型请求(通常的业务类型),端口为8080,Netty WebSockt服务器主要处理用户消息通信的WebSocket类型请求,端口为3333。用户通过浏览器登录后,浏览器会维持一个Session对象(有效时间30分钟)来保持登录状态,Tomcat服务器会返回用户的个人信息,同时记录在线用户,根据用户id建立一条WebSocket连接并保存在后端以便进行实时通信。当一个用户向另一用户发起通信,服务器会根据消息内容中的对话方用户id,找到保存的WebSocket连接,通过该连接发送消息,对方就能够收到即时收到消息。当用户注销或退出时,释放WebSocket连接,清空Session对象中的登录状态。(插播一条广告:需要开通正版IDEA的可以联系我,56元一年,正版授权激活,官网可查有效期,有需要的加我微信:poxiaozhiai6,备注:914。)

事实上Netty也可以用作一个HTTP服务器,而这里使用Spring MVC处理HTTP请求是出于熟悉的缘故,也比较接近传统开发的方式。

2.2 系统结构

系统采用B/S(Browser/Server),即浏览器/服务器的结构,主要事务逻辑在服务器端(Server)实现。借鉴MVC模式的思想,从上至下具体又分为视图层(View)、控制层(Controller)、业务层(Service)、模型层(Model)、数据访问层(Data Access)

2.3 项目结构

项目后端结构:

项目前端结构:

2.4 系统功能模块

系统只包括两个模块:登录模块和聊天管理模块。

  • 登录模块:既然作为一个系统,那么登录的角色认证是必不可少的,这里使用简单、传统的Session方式维持登录状态,当然也有对应的注销功能,但这里的注销除了清空Session对象,还要释放WebSocket连接,否则造成内存泄露。

  • 聊天管理模块:系统的核心模块,这部分主要使用Netty框架实现,功能包括信息、文件的单条和多条发送,也支持表情发送。

  • 其他模块:如好友管理模块、聊天记录管理、注册模块等,我并没有实现,有兴趣的话可以自行实现,与传统的开发方式类似。

由于本系统涉及多个用户状态,有必要进行说明,下面给出本系统的用户状态转换图。

2.5 系统界面

系统聊天界面如下:

3. 核心编码

这里只说明需要注意的地方,详细的请看源码

3.1 Netty服务器启动与关闭

当关闭Tomcat服务器时,也要释放Netty相关资源,否则会造成内存泄漏,关闭方法如下面的close(),如果只是使用shutdownGracefully()方法的话,关闭时会报内存泄露Memory Leak异常(但IDE可能来不及输出到控制台)

/**
 * 描述: Netty WebSocket服务器
 *      使用独立的线程启动
 * @author Kanarien
 * @version 1.0
 * @date 2018年5月18日 上午11:22:51
 */
public class WebSocketServer implements Runnable{

        /**
  * 描述:启动Netty Websocket服务器
  */
 public void build() {
     // 略,详细请看源码
 }
     
      /**
  * 描述:关闭Netty Websocket服务器,主要是释放连接
  *     连接包括:服务器连接serverChannel,
  *     客户端TCP处理连接bossGroup,
  *     客户端I/O操作连接workerGroup
  *
  *     若只使用
  *         bossGroupFuture = bossGroup.shutdownGracefully();
  *         workerGroupFuture = workerGroup.shutdownGracefully();
  *     会造成内存泄漏。
  */
 public void close(){
     serverChannelFuture.channel().close();
  Future<?> bossGroupFuture = bossGroup.shutdownGracefully();
        Future<?> workerGroupFuture = workerGroup.shutdownGracefully();

        try {
            bossGroupFuture.await();
            workerGroupFuture.await();
        } catch (InterruptedException ignore) {
            ignore.printStackTrace();
        }
 }

}

4. 效果及操作演示

4.1 登录操作

登录入口为:http://localhost:8080/WebSocket/login 或 http://localhost:8080/WebSocket/ 当前系统用户固定为9个,群组1个,包括9人用户。

  • 用户1 用户名:Member001 密码:001

  • 用户2 用户名:Member002 密码:002

  • ······

  • 用户9 用户名:Member009 密码:009

4.2 聊天演示

5. 源码下载

下载链接: https://pan.baidu.com/s/1uLyUXvQKWL09URNsLEOdHw?pwd=654k

提取码: 654k

  • 50
    点赞
  • 347
    收藏
  • 打赏
    打赏
  • 23
    评论
Java聊天室的设计与实现socket 设计软件源码+WORD毕业论文文档 Java聊天系统主要用于实现在线聊天,基本功能包括:服务端和客户端。本系统结构如下: 1服务端: 1、能够开启和关闭服务器 2、等待着客户端从特殊端口发送的请求 3、监听的端口并不是固定的,服务端的端口是能够自定义的 4、能够广播消息向所有连接到服务器的用户 2客户端: 1、能够和服务端进行连接 2、新的用户能够注册账号 3、通过用户名以及密码完成用户的登陆,连接到聊天室 4、用户能够在聊天室发送消息 目 录 摘要 I Abstract II 目 录 III 1 引言 1 2 网络聊天室的简介 2 2.1网络聊天室现状和发展 2 3 完成网络聊天室的技术以及环境 4 3.1 Java的介绍 4 3.2 Java的特点 4 3.3 TCP/IP协议的知识 5 3.4 Socket的介绍 6 3.5 开发工具 6 4 网络聊天系统的设计 7 4.1项目概述 7 4.2 网络聊天系统的设计 7 5 系统详细设计 8 5.1 服务器模块的设计 8 5.2 客户端模块的设计 8 6 系统测试 9 6.1 单元测试 9 6.2 系统测试 9 7 总结 10 参考文献 11 致谢 12 1 引 言 随着社会的发展和互联网技术的发展,普通老百姓也能够拥有属于自己的计算机,在平常的生活中也离不开了网络技术的支持,而替代了电话和写信的网上即时聊天成为了人们十分常见的沟通方式。 本软件是采用sun公司开发提供的java语言制作的,是基于C/S模型的网上聊天室。这个系统分为两个部分,服务端和客户端。服务端的工作主要是来监听和接收来自客户端的请求,然后处理客户端发来的消息,并通知客户端。而客户端的功能是能够让新用户注册,通过用户名密码登陆并且使用该系统。通过服务端和客户端的协同工作最终使用户能够使用网络聊天室,在聊天室中完成用户和用户之间的沟通。 2 网络聊天室简介 当今社会,能够实现即时通讯的软件使用频率是十分恐怖的,网络聊天室作为它的一种,使用人数也是相当可观的。国内处于垄断的QQ,业界老大哥微软的MSN都是大众关注和使用的焦点,普通老百姓也能够拥有属于自己的计算机,在平常的生活中也离不开了网络技术的支持,它是人们的生活变得十分的便利和高效,你能在网上找到自己想要的信息和有共同兴趣爱好的朋友。而且,现在很多的软件还有多人聊天,电子会议等一系列功能。 2.1 网络聊天室现状和发展 网上即时聊天室是广泛使用的一种技术,它的简单方便的沟通方式能够被广大的网上用户所使用。在当今社会,网上聊天互联网服务重要的一环,有大约43%的用户都会使用网上聊天,是排在第四位。但是有很多人认为网络聊天室就是一种用来娱乐和打发时间的方式,而缺少了实际的价值。就目前来说,能够完成收入的网络聊天室其实并不多。它应该怎么实现自己的商业价值外界并没有过多的关注。 现在,很多企业都会开发属于自己的聊天室,用户通过该网站注册的用户名以及密码登陆到企业的服务器上。在聊天室中,用户之间可以通过输入文字以及各种符号来表达自己的想法,来达到互相之间的沟通。目前,开发一个供用户使用的网络聊天室的技术门槛并不是很高,也不需要大量的资金,国家对于这方面的管制和政策也没有太限制,所以当今社会上聊天室的竞争其实是很激烈的,腾讯,网易,新浪都有属于自己的网络聊天

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页
评论 23

打赏作者

Java程序员-张凯

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值