热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

javawebsocket_websocket实时聊天设计

使用websocket建立双向连接,进行消息接收发送。服务器:java前端web框加:vueapp:uni-app一对一聊天

使用websocket建立双向连接,进行消息接收发送。

服务器:java

前端web框加:vue

app:uni-app

一对一聊天

通常单对单聊天过程是A、B两个客户端建立连接,相互发送和接收消息。这是聊天系统的第一步尝试,假设两个客户端可以互通,也就是相互通过IP可以访问对方,那么直接在前端建立websocket连接后就可以相互发送消息,需要自定义编码处理的就是接收消息后的处理方法和发送消息功能的触发。

9728e2cdcf011e6c2cbd59ce0179209a.png

多对多聊天

事实上,通常两个客户端是没有办法直接通过IP互联的,比如我们的电脑,使用的家庭宽带,内网IP,一个区域公用一个公网IP,可以联网,但是外网不能主动访问到你的机器,这就使得初步设计的聊天方案无法实行,另外我们需要的多人聊天,类似一张网,一个节点连接无数个节点,同时进行消息交互。为此,我们需要加上服务端,类似电视电影中的老式电话,呼叫服务台,帮你转接指定目标。

66920d082ddcba6b1fae79b21aef68ee.png

加入服务端后,客户端A、B不进行直接互联,都统服务器连接。而服务器不主动连接客户端,同样因为IP问题,服务器不能找到客户端地址。客户端联网登录,主动发起websocket连接申请,建立与服务器间的连接通道,此时服务器和客户端都可以主动发送消息给对方和接收对方消息。不仅如此,连接建立后,服务器可以把多个客户端的消息同时发送给一个客户端,也就实现了用户A同时和多人聊天,只需要在消息结构中处理好消息发送来源,标识每条消息是谁发送的,在展示给用户的时候作好分组。

整体上的聊天系统,依靠三方就能实现,继续细化服务器端的内容,需要解决的问题是:服务器接收到客户端消息后,如何准确找到消息要送达的目标客户端。分三步:

· 服务器保存所有websocket连接实例

· 拆分消息体,获取目标客户端标识

· 根据标识从保存的实例中匹配连接

31116b81b13ffe75c648c65f24e45456.png

保存websocket连接实例

websocket每次连接都会新创建实例,后台需要保存这些实例,并为每个实例加上标识,标明连接是哪个用户建立的,供后期使用查找。java可以使用map和list,map可以通过key值快速定位,list需要循环匹配,消耗时间。以HashMap为例保存连接实例。假设每个用户都需要登录后才能建立连接,每个登录用户都配备一个token作为唯一登录标识,以token为map的key,建立公共静态变量,类型HashMap。这样每建立一个连接,就往Map中加入一个元素。

拆分消息体,获取目标客户

服务端接收的消息为String类型(类型可以设置),Json结构,后台转化为Json类型后,按照预先设计的结构,从json中获取token。

匹配连接,发送消息

承接上一步,用token获取到map中的实例,先判断session是否有效,有效则表示服务器与客户端的连接还保持着,客户端可以接收服务器消息,服务器可以直接发送消息内容。如果session无效或者查不到连接,则需要后台处理,保存未读消息。

java使用websocket

在springBoot中使用websocket,需要用到的注解。

044ef6052e5c749bce5666bab93a11fd.png



推荐阅读
  • 本文详细解析了JSONP(JSON with Padding)的跨域机制及其工作原理。JSONP是一种通过动态创建``标签来实现跨域请求的技术,其核心在于利用了浏览器对``标签的宽松同源策略。文章不仅介绍了JSONP的产生背景,还深入探讨了其具体实现过程,包括如何构造请求、服务器端如何响应以及客户端如何处理返回的数据。此外,还分析了JSONP的优势和局限性,帮助读者全面理解这一技术在现代Web开发中的应用。 ... [详细]
  • 本文探讨了利用Java实现WebSocket实时消息推送技术的方法。与传统的轮询、长连接或短连接等方案相比,WebSocket提供了一种更为高效和低延迟的双向通信机制。通过建立持久连接,服务器能够主动向客户端推送数据,从而实现真正的实时消息传递。此外,本文还介绍了WebSocket在实际应用中的优势和应用场景,并提供了详细的实现步骤和技术细节。 ... [详细]
  • 深入浅出解析HTTP协议的核心功能与应用
    前言——协议是指预先设定的通信规则,确保双方能够按照既定标准进行有效沟通,从而实现准确的信息交换。例如,驯兽师通过拍手使动物坐下,这实际上是一种预设的协议。本文将详细探讨HTTP协议的核心功能及其广泛应用,解析其在现代网络通信中的重要作用。 ... [详细]
  • 春季职场跃迁指南:如何高效利用金三银四跳槽季
    随着每年的‘金三银四’跳槽高峰期的到来,许多职场人士都开始考虑是否应该寻找新的职业机会。本文将探讨如何制定有效的职业规划、撰写吸引人的简历以及掌握面试技巧,助您在这关键时期成功实现职场跃迁。 ... [详细]
  • Python3爬虫入门:pyspider的基本使用[python爬虫入门]
    Python学习网有大量免费的Python入门教程,欢迎大家来学习。本文主要通过爬取去哪儿网的旅游攻略来给大家介绍pyspid ... [详细]
  • 本文探讨了Web应用(Web App)与原生应用(Native App)之间的主要差异,包括它们在开发、功能实现及版本管理等方面的不同特点,并分析了各自的优势与适用场景。 ... [详细]
  • 本文探讨了如何在 Spring MVC 框架下,通过自定义注解和拦截器机制来实现细粒度的权限管理功能。 ... [详细]
  • Maven + Spring + MyBatis + MySQL 环境搭建与实例解析
    本文详细介绍如何使用MySQL数据库进行环境搭建,包括创建数据库表并插入示例数据。随后,逐步指导如何配置Maven项目,整合Spring框架与MyBatis,实现高效的数据访问。 ... [详细]
  • 本文探讨了 Java 中 HttpClient 和 HtmlUnit 的区别,重点介绍了它们的功能和应用场景。 ... [详细]
  • 修复一个 Bug 竟耗时两天?真的有那么复杂吗?
    修复一个 Bug 竟然耗费了两天时间?这背后究竟隐藏着怎样的复杂性?本文将深入探讨这个看似简单的 Bug 为何会如此棘手,从代码层面剖析问题根源,并分享解决过程中遇到的技术挑战和心得。 ... [详细]
  • 基于Spring Boot与WebSocket的网吧客户管理系统毕业设计【详细代码解析、安装调试及文档指导】
    本毕业设计基于Spring Boot和WebSocket技术,开发了一套功能完善的网吧客户管理系统。系统不仅涵盖了客户信息管理、在线聊天等功能,还提供了详细的代码解析、安装调试指南及全面的文档支持。适用于计算机科学与技术专业学生,特别是对JavaWeb开发感兴趣的读者。 ... [详细]
  • 如何在UniApp中实现顶部导航栏的按钮与搜索框显示功能
    本文介绍了如何用uni-app实现顶部导航栏显示按钮和搜索框,感兴趣的同学,可以参 ... [详细]
  • 用uniapp和springboot做出的高效记忆小程序,技术点总结
    临时起意老早前就听说过一些高效记忆的方法,其中听的最多的就是艾宾浩斯记忆法和费曼学习法。恰好赶上过年放假,就在想除了吃吃吃之外,还能干点什么。本来想学习理财的知识,一看概念还真不少 ... [详细]
  • 本文目录一览:1、Geth控制台使用及Web3.js使用 ... [详细]
  • 本文回顾了作者在求职阿里和腾讯实习生过程中,从最初的迷茫到最后成功获得Offer的心路历程。文中不仅分享了个人的面试经历,还提供了宝贵的面试准备建议和技巧。 ... [详细]
author-avatar
武艺最新单曲问月008
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有