ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

聊天室项目(一)

2022-01-27 13:33:17  阅读:173  来源: 互联网

标签:聊天室 网页 项目 对象 setInterval 服务器 now 客户端


1.实现通知模型的方案

   1)客户端主动发起,服务器被动响应:请求-响应模型   HTTP协议
   2)客户端发起订阅,服务器主动通知:订阅-通知模型  b站关注up主 (本项目使用该方式)
如何使用请求-响应模型去模拟订阅-通知模型(在HTTP协议背景下,如果做到客户端及时收取服务器的新消息)
1)轮询模式的方案:客户端定期的(按照固定频率、按照随机频率、或者其他频率) 去服务器询问
优点:方案实现简单(好设计)、不用长期保持信道
缺点:如果通知的比率不高(问100次,只有一次结果),有很多性能浪费,有时延
(使用请求-响应模型模拟)短轮询 长轮询
2)真正的通知(通过websocket做到)

//获取本地(强调的是运行代码的计算机配置的时区 +8 Asia/Shanghai)
        LocalDateTime now = LocalDateTime.now();
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        String s= formatter.format(now);

使用setInterval:setInterval()可以重复的调用一个函数或执行一个代码片段,在每次调用之间具有固定的时间延迟
例如: setInterval(main,5000)   让浏览器每隔5秒,调用一次main方法

什么是AJAX?

ajax是一种用于创建快速动态网页的技术
  通过在后台与服务器进行少量的数据交换,ajax可以使网页实现异步更新,这意味着可以在不重新加载整个网页的情况下,对网页的某部分
进行更新,传统网页(不适用ajax)如果需要更新内容,必须重载整个网页页面
var xhr=new XMLHttpRequest(); 

webSocket方案  

 客户端主动,一旦建立连接,之后,会产生一个全双工(可以双向通信,互不干扰)的信道
1.定义类
2.不需要实现什么接口、或者继承什么类
3.通过@ServerEndpoint注解修饰类
websocket的处理,背后也是事件驱动的影子
可能事件:
open:当有客户端连接成功时
close:当对方关闭连接时
error:当通信过程中发生错误时
message:当收到对方的消息
通过四个注解 
@OnOpen    @OnClose   @OnError    @OnMessage

webSocket版本的显示当前时间
额外:使用一点线程的知识(定时器的方式体现)
线程封装出的一个定时器(Timer),就类似js上,刚才学的setInterval的用法
  准备好的一些事情在js上以function的形式体现,在java中以TimerTask对象的形式体现
  设置好间隔时间之后,就会按照固定的频率去执行我们的任务

NowEndpoint这个类的对象,是由Tomcat给我们创建的,这个和NowServlet类的对象创建是类似的
但不同之处在于:
NowServlet对象,在整体Tomcat运行过程中,只会实例化一次
NowEndpont对象,是每次有新的websocket建立,都会实例化一个对象
NowServlet 对象的属性,在每次请求/now时,都是同一个数据(因为同一个对象,所以属性是同一个)共享的
NowEndpoint对象的属性,是每次建立 /now-ws时,都是各自对各象的数据,互相不是同一个数据

标签:聊天室,网页,项目,对象,setInterval,服务器,now,客户端
来源: https://blog.csdn.net/StringKing/article/details/122716188

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有