其他分享
首页 > 其他分享> > 聊天室项目(一)

聊天室项目(一)

作者:互联网

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