博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
websocket扫盲:基础知识(二)
阅读量:6416 次
发布时间:2019-06-23

本文共 1495 字,大约阅读时间需要 4 分钟。

https://www.cnblogs.com/huangcy/p/9183767.html

一:建立好websocket通信后,如何在数据库更新后,将消息发送给客户端。

需求:

数据库更新之后服务器推送消息给前台,让前台做操作。(数据库的数据不是由服务器写入的

实现的话说到底都是用轮询,因为数据库的数据不是通过后台插入更新的,所以无论用什么办法,都需要循环地去读取数据库中的信息或者数据库的日志文件。区别就是,到底是前台轮询,还是后台轮询了。

如果使用前台轮询,就是前台定期给后台发送请求,来对数据进行更新,用setInterval()就能实现。你F12看Network就能看到一会就有几十甚至几百个请求。。因为我也是第一次实现这样的功能,虽然对性能这方面没有什么研究,但是看到短时间内这么多请求还是觉得心慌慌。

所以想到了使用后台轮询,后台轮询的好处就是,前台不用一直发送请求给后台,而是等到后台发现数据更新了再提醒前台重新请求数据。这就需要用到WebSocket。

我们平常使用的http连接,都是只能客户端向服务器发送请求。

而WebSocket的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送技术的一种。

在查询资料的时候也查到可以用数据库的存储过程来实现,在存储数据的时候,调用Java的程序来进行通知。(因为还有一些处理方面的问题没有去实现)

环境

Server version : Apache Tomcat/7.0.69

Java version: 1.7.0_80

需要引入的jar包:tomcat自带的tomcat7-websocket.jarwebsocket-api.jar,这两个jar包都在tomcat安装目录的lib文件夹下。

需要注意的是:tomcat需要7.0.47版本以上才支持JSR-356,具体文档可以

思路:

建立连接的时候开启一个线程对数据库中的数据进行轮询,如果查询到数据变化了,就发消息给WebSocket实现类,实现类接收到消息后,推送消息给连接着的用户。

(如果数据是通过后台添加的,就不用这么麻烦了,直接在添加数据的操作类中发送消息给WebSocket实现类就好了)

客户端代码:

服务器端代码:

开启连接的时候启动了一个线程,关闭连接的时候调用线程的stopMe()方法,终止线程。当接收到消息的时候,调用sendMessage()方法给所有连接着的用户发送消息。

需要注意的是,一旦建立了连接,就会创建一个session,这个session和request中的session不一样,但是可以用类似的想法来理解。所以在发送消息的时候也需要调用session的方法来给连接着的用户发送消息。

WebSocket session发送文本消息有两个方法:getAsyncRemote()和getBasicRemote(),这两个方法我只是简单了解了一下,前者是异步发送消息,后者是同步发送消息。也就是说getBasicRemote()要等上一条消息发送完才能发送下一条消息。如果有错误的话希望大家指出!

在文档中我们看到也可以在服务器端接收消息的时候也可以直接在onMessage()方法中return txt.toUpperCase()来发送消息给消息发送方,但是在这个例子中,我们的消息是线程发送给WebSocket实现类的,所以不用这个方法。

转载于:https://www.cnblogs.com/maowuyu-xb/p/10415121.html

你可能感兴趣的文章
洛谷P1962 斐波那契数列
查看>>
题解——HDU 4734 F(x) (数位DP)
查看>>
[转]35 岁前程序员要规划好的四件事
查看>>
大话F#和C#:是否会重蹈C#失败的覆辙?
查看>>
jQuery常用方法
查看>>
经典算法
查看>>
11 用户交互,显示省市县三级联动的选择
查看>>
sql语句的优化分析
查看>>
运维面试题五十题
查看>>
雷神编码博客入口
查看>>
当通过Struts2传值给后台时,如果是外键,传字符串那么会出现错误
查看>>
主流浏览器
查看>>
String类replaceAll方法正则替换深入分析
查看>>
快速排序
查看>>
极限编程和JUnit
查看>>
linux上部署ant
查看>>
arc073 F many moves(dp + 线段树)
查看>>
长理 校赛的 一个贪心题
查看>>
vuecli3初尝试(转载)
查看>>
学习笔记:索引碎片、计划缓存、统计信息
查看>>