使用WebSocket实现网页聊天室

服务器推送你还在使用轮询吗本文将带你领略WebSocket的魅力,轻松实现服务器推送功能。本文将以下面两方面让你理解WebSocket并应用到具体的开发中。

WebSocket概述

使用WebSocket实现网页聊天室

二、WebSocket

2.WebSocket介绍

WebSocket是一种网络通信协议。RFC6455定义了它的通信标准。

WebSocket是HTML5开始提供的一种在单个TCP连接上进行全双工通讯的协议。

HTTP协议是一种无状态的、无连接的、单向的应用层协议。它采用了请求/响应模型。通信请求只能由客户端发起,服务端对请求做出应答处理。

这种通信模型有一个弊端:HTTP协议无法实现服务器主动向客户端发起消息。

这种单向请求的特点,注定了如果服务器有连续的状态变化,客户端要获知就非常麻烦。大多数Web应用程序将通过频繁的异步AJAX请求实现长轮询。轮询的效率低,非常浪费资源(因为必须不停连接,或者HTTP连接始终打开)。

websocket协议:

2.websocket协议

本协议有两部分:握手和数据传输。

来自客户端的握手看起来像如下形式:

GETws://localhost/chatHTTP/1.1Host:localhostUpgrade:websocketConnection:UpgradeSec-WebSocket-Key:dGhlIHNhbXBsZSBub25jZQ==Sec-WebSocket-Extensions:permessage-deflateSec-WebSocket-Version:13来自服务器的握手看起来像如下形式:

HTTP/1.1101SwitchingProtocolsUpgrade:websocketConnection:UpgradeSec-WebSocket-Accept:s3pPLMBiTxaQ9kYGzzhZRbK+xOo=Sec-WebSocket-Extensions:permessage-deflate字段说明:

|头名称|说明||:------------------------|------------------------------------------------------------||Connection:Upgrade|标识该HTTP请求是一个协议升级请求||Upgrade:WebSocket|协议升级为WebSocket协议||Sec-WebSocket-Version:13|客户端支持WebSocket的版本||Sec-WebSocket-Key:|客户端采用base64编码的24位随机字符序列,服务器接受客户端HTTP协议升级的证明。要求服务端响应一个对应加密的Sec-WebSocket-Accept头信息作为应答||Sec-WebSocket-Extensions|协议扩展类型|3.客户端(浏览器)实现

3.1websocket对象

实现WebSockets的Web浏览器将通过WebSocket对象公开所有必需的客户端功能(主要指支持Html5的浏览器)。

以下API用于创建WebSocket对象:

varws=newWebSocket(url);>参数url格式说明:ws://ip地址:端口号/资源名称

3.2websocket事件

|事件|事件处理程序|描述|

|-------|-----------------------|--------------------------|

|open|websocket对象.onopen|连接建立时触发|

|message|websocket对象.onmessage|客户端接收服务端数据时触发|

|error|websocket对象.onerror|通信发生错误时触发|

|close|websocket对象.onclose|连接关闭时触发|

3.3WebSocket方法

|方法|描述|

|------|----------------|

|send()|使用连接发送数据|

4.服务端实现

Tomcat的7.0.5版本开始支持WebSocket,并且实现了JavaWebSocket规范(JSR356)。

我们可以通过两种方式定义Endpoint:

第一种是编程式,即继承类javax.websocket.Endpoint并实现其方法。

|方法|含义描述|注解|

|-------|------------------------------------------------------------|--------|

|onClose|当会话关闭时调用。|@OnClose|

|onOpen|当开启一个新的会话时调用,该方法是客户端与服务端握手成功后调用的方法。|@OnOpen|

|onError|当连接过程中异常时调用。|@OnError|

服务端如何接收客户端发送的数据呢

通过为Session添加MessageHandler消息处理器来接收消息,当采用注解方式定义Endpoint时,我们还可以通过@OnMessage注解指定接收消息的方法。

服务端如何推送数据给客户端呢

发送消息则由RemoteEndpoint完成,其实例由Session维护,根据使用情况,我们可以通过Session.getBasicRemote获取同步消息发送的实例,然后调用其sendXxx()方法就可以发送消息,可以通过Session.getAsyncRemote获取异步消息发送实例。

服务端代码:

@ServerEndpoint("/robin")publicclassChatEndPoint{privatestaticSetwebSocketSet=newHashSet<>();privateSessionsession;@OnMessagepublicvoidonMessage(Stringmessage,Sessionsession)throwsIOException{System.out.println("接收的消息是:"+message);System.out.println(session);//将消息发送给其他的用户for(Chatchat:webSocketSet){if(chat!=this){chat.session.getBasicRemote().sendText(message);}}}@OnOpenpublicvoidonOpen(Sessionsession){this.session=session;webSocketSet.add(this);}@OnClosepublicvoidonClose(Sessionseesion){System.out.println("连接关闭了。。。");}@OnErrorpublicvoidonError(Sessionsession,Throwableerror){System.out.println("出错了。。。。"+error.getMessage());}}三、基于WebSocket的网页聊天室

1.需求

通过websocket实现一个简易的聊天室功能。

1).登陆聊天室

2).登陆之后,进入聊天界面进行聊天

登陆成功后,呈现出以后的效果:

当我们想和李四聊天时就可以点击`好友列表`中的`李四`,效果如下:

接下来就可以进行聊天了,“张三”的界面如下:

“李四”的界面如下:

2.实现流程

3.消息格式

客户端-->服务端

{"toName":"张三","message":"你好"}

服务端-->客户端

系统消息格式:{"isSystem":true,"fromName":null,"message":["李四","王五"]}

推送给某一个的消息格式:{"isSystem":false,"fromName":"张三","message":"你好"}

4.功能实现

org.springframework.bootspring-boot-starter-parent2.1.5.RELEASEorg.springframework.bootspring-boot-starter-websocketorg.springframework.bootspring-boot-starter-weborg.springframework.bootspring-boot-devtoolstruetrueorg.springframework.bootspring-boot-maven-plugin4.2引入静态资源文件

4.3引入公共资源

pojo类

/***@versionv1.0*@ClassName:MessageUtils*@Description:用来封装消息的工具类*@Author:黑马程序员*/publicclassMessageUtils{publicstaticStringgetMessage(booleanisSystemMessage,StringfromName,Objectmessage){try{ResultMessageresult=newResultMessage();result.setIsSystem(isSystemMessage);result.setMessage(message);if(fromName!=null){result.setFromName(fromName);}ObjectMappermapper=newObjectMapper();returnmapper.writeValueAsString(result);}catch(JsonProcessingExceptione){e.printStackTrace();}returnnull;}}4.4登陆功能实现

login.html:使用异步进行请求发送

@RequestMapping("/getUsername")publicStringgetUsername(HttpSessionsession){Stringusername=(String)session.getAttribute("user");returnusername;}4.6聊天室功能

客户端实现

在main.html页面实现前端代码:

`WebSocketConfig`类实现

开启springboot对websocket的支持

@ConfigurationpublicclassWebSocketConfig{@Bean//注入ServerEndpointExporter,自动注册使用@ServerEndpoint注解的publicServerEndpointExporterserverEndpointExporter(){returnnewServerEndpointExporter();}}

THE END
1.在线匿名聊天网站,虚拟交流的新领域探索军事电子装备1、匿名性:在线匿名聊天网站的核心特点在于用户的匿名性,用户可以在不透露真实身份的情况下,与他人进行交流和沟通。 2、多样性:在线匿名聊天网站涵盖了各种主题和兴趣群体,用户可以根据自己的需求选择合适的聊天室。 3、便捷性:在线匿名聊天网站不受时间、地点限制,用户可以随时随地进行交流,极大地提高了社交的便捷性。http://www.thhkgp.com/post/2305.html
2.使用WebSocket实现一个简易的在线聊天室(SpringBoot+Vue3,附源代先展示一下在线聊天室的效果(需要在两个不同的浏览器中打开) 0. 问题引入 相信大家在很多网站看到过以上效果:当收到一封新的邮件时,未读邮件图标右上角上的总数就会加一 大家有没有想过,服务器是如何_主动_地将消息实时推送给客户端的呢 1. 常见的消息推送方式 https://blog.csdn.net/m0_74825172/article/details/144276872
3.网页实时聊天之js和jQuery实现ajax长轮询腾讯云开发者社区聊天室消息处理: 为了防止每次都查询到全部信息,我们对数据库的查询操作更改一下,设置idflag=0,每次查询后,设置idflag为查询到的数据的id,查询时我们查询比idflag大的ID,即,新添加进去的信息。 这样,一个简单的聊天室程序就做好了。 如果您觉得本文对您有帮助,您可以推荐或关注我,如果您有什么问题,可以在下方https://cloud.tencent.com/developer/article/1012669
4.社交网络发展简史1988-即时聊天软件和聊天室 1994-中国全功能接入互联网 1994-曙光站 1992—1996-ChinaFidoNet(中国惠多网) 1995—1999中国网络论坛、聊天室 2000-聊聊 1996-ICQ 1997-AIM 1999-OICQ(QQ前身) 1999-MSN 1999-雅虎通 1997-Bolt、Six Degrees 1997-六度空间 1998-社交博客 2003-Friendster、MySpace 2003-Friendster https://zhuanlan.zhihu.com/p/577005192
5.新浪视频聊天新浪SHOW—邂逅、偶遇,我在直播等你!http://www.sinashow.com/
6.阿里巴巴网页即时聊天室社会新闻早报|网页即时聊天室 2024-11-30 05:40:24 来源: 猫眼电影 作者: 陈光力 手机查看 猫眼电影记者 陈光力 报道 “ji极管li你的he心业wu,这zhen是一ji难吃de药。wo们有hen多艰ku的工zuo要做。”墨fei表示,虽然di特律qi车制zao商需yao重新si考在zhong国的jing营方shi,但mei国电dong汽车ling导者te斯拉de情http://mall.chinahrd.net/huwei/20240730/78568.shtml?/appheji/6924153039_20240807.shtml
7.APP聊天源码,小程序聊天源码,H5网页聊天室泡泡IM是一套完整的即时通讯软件源码,可用作手机APP聊天源码,微信聊天小程序,H5网页聊天室,社交软件源码,支持语音、视频、文字聊天。泡泡IM聊天源码常用于APP即时通讯,用户间实时沟通、在线客服系统等诸多场景。https://www.popoim.com/
8.woocall网友可以快捷的发送聊天信息,Enter为发送快捷键。改名——重新设定昵称 网友可以随时修改自己的名字 房间历史记录 网友第一次进入聊天室,可以看到此前近几条其他网友的聊天记录,就可以很快加入聊天。广播 广播中发布与话题相关的重要信息,包括文字,文字链接,图片等形式。选择立场辩论(论战版功能)网友可以选择正、https://baike.baidu.com/item/woocall/8889694
9.C#制作简单的多人在线即时交流聊天室实现网页版的在线聊天室的方法有很多,在没有来到HTML5之前,常见的有:定时轮询、长连接+长轮询、基于第三方插件(如FLASH的Socket),而如果是HTML5,则比较简单,可以直接使用WebSocket,当然HTML5目前在PC端并没有被所有浏览器支持,所以我的这个聊天室仍是基于长连接+长轮询+原生的JS及AJAX实现的多人在线即时交流聊天室https://www.xiuzhanwang.com/a1/C_jiaocheng/6834.html
10.Title:APP聊天源码,小程序聊天源码,H5网页聊天室0 - 反链 0 0 - 0 - 最近访问 tronssien.comwww.feiyueshalun.comsouxiaowl.comttdancing.comaikuangzhijia.comm.qd24k99.comwlxysy.comwww.menghuwangluo.comm.shiguowangdzx.comwakeyoga.compinxuanxgt.comwww.lingyunzhimei.comwww.zhangzihan.com.cnuniseaskyfood.comwww.uojbls.comm.zkhmkj.cn00613.http://zttx121.com/tools/seo-lookup/www.popoim.com
11.爱聊视频聊天室www.loveliao.com简介:爱聊聊天室是是国内人气领先的免费视频聊天网站之一,24小时精彩大型多人免费视频聊天室,美女主播网友与你面对面视频聊天,高质量的网上视频聊天体验,真实自然的在线聊天,免费网站数据APPPC排名 百度权重 百度预估流量 百度收录 -- 211 7512 单月收录 百度索引量 百度反链数 关键词数 4 7512 51.40万 82 APPPChttps://mtop.chinaz.com/site_www.loveliao.com.html
12.2024年聊天软件:开启全新沟通方式新浪SHOW聊天室 4.0.165 官方 软件分类:即时通讯大小:45.18 MB时间:2022-03-25 软件介绍:新浪SHOW是一款由新浪开发的多人视频互动聊天工具。集成同城交友、婚恋交友、财经股票、同龄相约、音乐歌舞 立即查看 6.聊聊PC客户端 3.1.3 聊聊语音是一款先进的网络交友软件,利用最先进的语音视频技术,让用户能够与亲朋好友、https://app.zol.com.cn/jiqiao/142843.html
13.中国互联网二十年回忆网络应用与网络速度的关系非常紧密,在一个网速非常低,而网费又非常贵的年代,能够节省网费并提高打开网页的速度是人们普遍的愿望,人们的上网应用无不和此有关。新版的浏览器可以让访问网页速度提高,微软的电子邮件Outlook可以将邮件下载到本地离线查看,ICQ等即时通讯软件可以在低速网络下快速交流聊天,IRC聊天室是速度非常https://www.digitaling.com/articles/11228.html
14.网页聊天聊天室摸鱼开黑网页聊天 WYLT.COM 和平精英聊天开黑 点击进入 绝地求生聊天开黑 点击进入 文章&资讯 点击进入 CSGO聊天开黑 点击进入 闲聊 点击进入 点击进入 广场 瞬间/话题/帖子 聊天室 LOL聊天开黑 点击进入 和平精英聊天开黑 点击进入 绝地求生聊天开黑 点击进入 文章&资讯 点击进入 CSGO聊天开黑 点击进入 闲聊 点击进入 点击https://wylt.com/
15.网页聊天室软件下载网页聊天室软件是备受好评的免费软件,其功能十分全面且强大。软件界面语言全部是中文,所以操作极其方便。网页聊天室软件最后的更新时间是2024年07月20日,升级后修复了上个版本的错误。另外还优化了软件大小,软件大小是5.85MB,更专业的同时,更加轻快便捷了。 网页聊天室软件更新到这个版本,确实有了很大的进步,使用体验上https://www.180disk.com/soft/99378.html
16.web网页版聊天室51CTO博客已为您找到关于web网页版聊天室的相关内容,包含IT学习相关文档代码介绍、相关教程视频课程,以及web网页版聊天室问答内容。更多web网页版聊天室相关解答可以来51CTO博客参与分享和学习,帮助广大IT技术人实现成长和进步。https://blog.51cto.com/topic/webwangyebanliaotianshi.html
17.网页聊天室网站美女视频直播秀场秀色热点网页聊天室网站 现今很多人都选择网上聊天,因此网上聊天室也很多,在众多聊天室中,秀色网页聊天室网站受到很多人的喜欢,无论是年轻人,还是喜欢聊天的人都选择这里,这里安全稳定,随时随地让你听音乐,还能与你的女神面对面视频交友,快来网页聊天室网站,一起聊起来吧。https://www.showself.com/redian/redianW_2305.html
18.手把手教你撸一个网页聊天室在写这个demo的时候,我是边学边写的状态,学习资料以刘哇勇大神的Node.js+Web Socket 打造即时聊天程序嗨聊为主,主流搜索引擎和我最喜欢的技术社区SegmentFault为辅。 源码 源码已经上传至我的github, clone到本地以后在terminal中运行下面两条命令: npm install https://www.jianshu.com/p/3536b8bc0a8d
19.基于JAVA技术的即时通讯工具(聊天室)的设计与实现Javaweb计算机当今社会,计算机网络已经成为人们生活中不可缺少的一部分,人们从互连网上获取信息与朋友交流,网络应用越来越广泛,而网站如雨后春笋般地一个接着一个冒出来,因为提供静态信息的HTML网页并没有办法达到与用户交互的目的,所以才出现了各种交互式网页技术。要建设一个聊天室,首先,这个聊天室的整体概况要在我们脑海中要有https://www.2bysj.cn/Article/jsp/200905/1795.html
20.网页聊天室源码(WebChat)开发实例源码下载网页聊天室源码(WebChat) WEB/WAP应用开发 下载此实例 开发语言:Java 实例大小:19.97M 下载次数:92 浏览次数:4938 发布时间:2019-04-18 实例类别:WEB/WAP应用开发 发布人:petter1/1 文件格式:.zip 所需积分:2 相关标签:javawebchat 网友评论举报投诉收藏该页https://www.haolizi.net/example/view_21044.html
21.用tio来写一个网页聊天室或客服是个怎样的体验本文手把手教大家如何用t-io快速做一个网页版聊天室---可能这不仅仅只是个小demo,它更多的可作为项目的一个脚手架,读者可以以此为基础,完成一个真实的网页聊天室,甚至扩展成一个在线客服。 本文有部分代码并非必须,譬如数据监控相关的listener,但是在大型的项目中,对这些监控数据的处理却是一个必须,所以本文从实用https://www.imooc.com/article/29379
22.聊聊聊聊视频语音聊天室免费视频语音聊天交友聊聊(www.liaoliao.com聊聊网)是最早的免费语音聊天室。聊聊视频聊天室拥有高质量语音视频,帅哥美女在线视频聊天、在线直播,是同城交友、视频语音、免费聊天、K歌游戏的聊天平台。https://www.liaoliao.com/
23.亮剑江湖江湖聊天室江湖,是由亮剑江湖开发的怀旧版文字江湖聊天室游戏,无需下载,打开即玩,支持电脑版手机版。在江湖中您可以聊天交友,结婚生子,洞房花烛,可以打怪升级,养猪种花,招募士兵,比武论剑,创立门派。http://www.wangyejh.com/
24.我爱江湖聊天室江湖聊天室江湖我爱江湖江湖聊天室是一款怀旧网页江湖游戏。http://www.5ajh.com/