当前位置: 首页 > news >正文

如何做分公司网站线上推广的好处

如何做分公司网站,线上推广的好处,重庆app制作开发商,网站引导页怎么做的websocket 协议是在 http 协议上的一种补充协议,是 html5 的新特性,是一种持久化的协议。其实 websocket 和 http 关系并不是很大,不过都是属于应用层的协议,接下来我们就开始实战。 websocket 定时推送 本教程基于 springboot …

websocket 协议是在 http 协议上的一种补充协议,是 html5 的新特性,是一种持久化的协议。其实 websocket 和 http 关系并不是很大,不过都是属于应用层的协议,接下来我们就开始实战。

websocket 定时推送

本教程基于 springboot 为脚手架,没使用过 springboot 同学可以看往期文章,或者直接去 spring 官网拉一个 springboot 基础项目下来。

加入依赖

在 springboot 的项目中添加一下 webSocket 依赖,一般一项新技术的引入在 springboot 中也只是引用一个此技术 starter 的依赖,其他配置基本 springboot 帮我们解决了。

 
  1. <dependency>

  2. <groupId>org.springframework.boot</groupId>

  3. <artifactId>spring-boot-starter-websocket</artifactId>

  4. </dependency>

配置

新建一个 Java 配置类,注入 ServerEndpointExporter 配置,如果是使用 springboot 内置的 tomcat 此配置必须,如果是使用的是外部 tomcat 容器此步骤请忽略。看 spring 源码中这样描述,使用此配置可以关闭 servlet 容器对 websocket 端点的扫描,这个暂时没有深入研究。

 
  1. @Configuration

  2. public class WebSocketConfig {

  3. @Bean

  4. public ServerEndpointExporter serverEndpointExporter() {

  5. return new ServerEndpointExporter();

  6. }

  7. }

核心代码

接下来最核心的类其实就是提供一个前后端交互的类实现消息的接收推送。

  • @ServerEndpoint(value = "/wsdemo") 前端通过此 URI 和后端交互,建立连接

  • @Component 不用说将此类交给 spring 管理

  • @OnOpen websocket 建立连接的注解,前端触发上面 URI 时会进入此注解标注的方法,和之前关于 DWR 文章中的 onpage 方法类似

  • @OnClose 顾名思义关闭连接,销毁 session

  • @OnMessage 收到前端传来的消息后执行的方法

 
  1. @ServerEndpoint(value = "/wsdemo")

  2. @Component

  3. public class MyWebSocket {

  4. private static int onlineCount = 0;

  5. private static CopyOnWriteArraySet<MyWebSocket> webSocketSet = new CopyOnWriteArraySet<MyWebSocket>();

  6. private Session session;

  7. @OnOpen

  8. public void onOpen(Session session) {

  9. this.session = session;

  10. webSocketSet.add(this);

  11. addOnlineCount();

  12. System.out.println("有新连接加入!当前在线人数为" + getOnlineCount());

  13. try {

  14. sendMessage("连接已建立成功.");

  15. } catch (Exception e) {

  16. System.out.println("IO异常");

  17. }

  18. }

  19. @OnClose

  20. public void onClose() {

  21. webSocketSet.remove(this);

  22. subOnlineCount();

  23. System.out.println("有一连接关闭!当前在线人数为" + getOnlineCount());

  24. }

  25. @OnMessage

  26. public void onMessage(String message, Session session) {

  27. System.out.println("来自客户端的消息:" + message);

  28. }

  29. @OnError

  30. public void onError(Session session, Throwable error) {

  31. System.out.println("发生错误");

  32. error.printStackTrace();

  33. }

  34. public void sendMessage(String message) throws IOException {

  35. this.session.getBasicRemote().sendText(message);

  36. }

  37. public static synchronized int getOnlineCount() {

  38. return onlineCount;

  39. }

  40. public static synchronized void addOnlineCount() {

  41. MyWebSocket.onlineCount++;

  42. }

  43. public static synchronized void subOnlineCount() {

  44. MyWebSocket.onlineCount--;

  45. }

  46. public Session getSession() {

  47. return session;

  48. }

  49. public void setSession(Session session) {

  50. this.session = session;

  51. }

  52. public static CopyOnWriteArraySet<MyWebSocket> getWebSocketSet() {

  53. return webSocketSet;

  54. }

  55. public static void setWebSocketSet(CopyOnWriteArraySet<MyWebSocket> webSocketSet) {

  56. MyWebSocket.webSocketSet = webSocketSet;

  57. }

  58. }

定时任务

使用 spring 的 Schedule 建立定时任务

  • @EnableScheduling 开启 spring 定时任务功能

  • @Scheduled(cron = "0/10 * * * * ?") 用于标识定时执行的方法,此处主要方法返回值一定是 void,没有入参。对应定时时间配置可以百度 cron 语法,根据自己的业务选择合适的周期
    在这类中,我们通过上面 MyWebSocket 提供的静态方法获取其中的 webSocketSet ,来获取所有此业务相关的所有 websocketsession,可以在定时任务中对 session 内容进行验证判断(权限验证等),进行发送消息

 
  1. @Component

  2. @EnableScheduling

  3. public class TimeTask

  4. {

  5. private static Logger logger = LoggerFactory.getLogger(TimeTask.class);

  6. @Scheduled(cron = "0/1 * * * * ?")

  7. public void test(){

  8. System.err.println("********* 定时任务执行 **************");

  9. CopyOnWriteArraySet<MyWebSocket> webSocketSet =

  10. MyWebSocket.getWebSocketSet();

  11. int i = 0 ;

  12. webSocketSet.forEach(c->{

  13. try {

  14. c.sendMessage(" 定时发送 " + new Date().toLocaleString());

  15. } catch (IOException e) {

  16. e.printStackTrace();

  17. }

  18. });

  19. System.err.println("/n 定时任务完成.......");

  20. }

  21. }

前端页面

前端页面可以参考使用,主要要更改调用的 url 为自己项目 URL

 
  1. <!DOCTYPE HTML>

  2. <html>

  3. <head>

  4. <title>My WebSocket</title>

  5. </head>

  6. <body>

  7. Welcome<br/>

  8. <input type="text" /><button onclick="send()">Send</button> <button onclick="closeWebSocket()">Close</button>

  9. <div>

  10. </div>

  11. </body>

  12. <script type="text/javascript">

  13. var websocket = null;

  14. //判断当前浏览器是否支持WebSocket ,主要此处要更换为自己的地址

  15. if('WebSocket' in window){

  16. websocket = new WebSocket("ws://localhost:8886/wsdemo");

  17. }

  18. else{

  19. alert('Not support websocket')

  20. }

  21. //连接发生错误的回调方法

  22. websocket.onerror = function(){

  23. setMessageInnerHTML("error");

  24. };

  25. //连接成功建立的回调方法

  26. websocket.onopen = function(event){

  27. setMessageInnerHTML("open");

  28. }

  29. //接收到消息的回调方法

  30. websocket.onmessage = function(event){

  31. setMessageInnerHTML(event.data);

  32. }

  33. //连接关闭的回调方法

  34. websocket.onclose = function(){

  35. setMessageInnerHTML("close");

  36. }

  37. //监听窗口关闭事件,当窗口关闭时,主动去关闭websocket连接,防止连接还没断开就关闭窗口,server端会抛异常。

  38. window.onbeforeunload = function(){

  39. websocket.close();

  40. }

  41. //将消息显示在网页上

  42. function setMessageInnerHTML(innerHTML){

  43. document.getElementById('message').innerHTML += innerHTML + '<br/>';

  44. }

  45. //关闭连接

  46. function closeWebSocket(){

  47. websocket.close();

  48. }

  49. //发送消息

  50. function send(){

  51. var message = document.getElementById('text').value;

  52. websocket.send(message);

  53. }

  54. </script>

  55. </html>

效果演示

 
 

最后说一句(求关注!别白嫖!)

如果这篇文章对您有所帮助,或者有所启发的话,求一键三连:点赞、转发、在看。

关注公众号:woniuxgg,在公众号中回复:笔记  就可以获得蜗牛为你精心准备的java实战语雀笔记,回复面试、开发手册、有超赞的粉丝福利!


文章转载自:
http://wanjiaspeedily.rsnd.cn
http://wanjiadetest.rsnd.cn
http://wanjiawronghead.rsnd.cn
http://wanjiayakow.rsnd.cn
http://wanjiasuzerainty.rsnd.cn
http://wanjiaalgernon.rsnd.cn
http://wanjiavanadic.rsnd.cn
http://wanjiaroquesite.rsnd.cn
http://wanjiasphacelous.rsnd.cn
http://wanjiaphonomania.rsnd.cn
http://wanjiamattery.rsnd.cn
http://wanjiadominoes.rsnd.cn
http://wanjiamelange.rsnd.cn
http://wanjialegerdemain.rsnd.cn
http://wanjiajadish.rsnd.cn
http://wanjiaprobably.rsnd.cn
http://wanjiasleepless.rsnd.cn
http://wanjiabannock.rsnd.cn
http://wanjiaunpersuasive.rsnd.cn
http://wanjiapose.rsnd.cn
http://wanjiacrazyweed.rsnd.cn
http://wanjiaarmoire.rsnd.cn
http://wanjiamane.rsnd.cn
http://wanjiaflipper.rsnd.cn
http://wanjiadangler.rsnd.cn
http://wanjiaautoionization.rsnd.cn
http://wanjiaradiopaque.rsnd.cn
http://wanjiarecognizant.rsnd.cn
http://wanjiacong.rsnd.cn
http://wanjiabelting.rsnd.cn
http://wanjiavolumeter.rsnd.cn
http://wanjialampas.rsnd.cn
http://wanjiapothead.rsnd.cn
http://wanjiashadowiness.rsnd.cn
http://wanjiahadhramautian.rsnd.cn
http://wanjiaextraordinarily.rsnd.cn
http://wanjiacosmopolitical.rsnd.cn
http://wanjiagonfanon.rsnd.cn
http://wanjiathankfulness.rsnd.cn
http://wanjianematodiriasis.rsnd.cn
http://wanjiadispeace.rsnd.cn
http://wanjiadioxin.rsnd.cn
http://wanjiatriptyque.rsnd.cn
http://wanjialucidness.rsnd.cn
http://wanjiaoeillade.rsnd.cn
http://wanjiasequoia.rsnd.cn
http://wanjiabmta.rsnd.cn
http://wanjiataws.rsnd.cn
http://wanjiaintriguant.rsnd.cn
http://wanjialugouqiao.rsnd.cn
http://wanjiahainan.rsnd.cn
http://wanjiamarianao.rsnd.cn
http://wanjialithophile.rsnd.cn
http://wanjiaunanswered.rsnd.cn
http://wanjiasavourless.rsnd.cn
http://wanjiaaborning.rsnd.cn
http://wanjialongan.rsnd.cn
http://wanjiachauncey.rsnd.cn
http://wanjiaembourgeoisification.rsnd.cn
http://wanjiavulva.rsnd.cn
http://wanjiadistinct.rsnd.cn
http://wanjiayunnan.rsnd.cn
http://wanjiaworldly.rsnd.cn
http://wanjiamarsha.rsnd.cn
http://wanjiaunmoor.rsnd.cn
http://wanjiacaducei.rsnd.cn
http://wanjialottery.rsnd.cn
http://wanjiawarlord.rsnd.cn
http://wanjiaantilithic.rsnd.cn
http://wanjiacaidos.rsnd.cn
http://wanjiapedicab.rsnd.cn
http://wanjiathankfulness.rsnd.cn
http://wanjiaconsonance.rsnd.cn
http://wanjiaexpandedness.rsnd.cn
http://wanjiacarotenoid.rsnd.cn
http://wanjiaharmonization.rsnd.cn
http://wanjiacrashworthiness.rsnd.cn
http://wanjialattin.rsnd.cn
http://wanjiareceptionist.rsnd.cn
http://wanjiainflow.rsnd.cn
http://www.15wanjia.com/news/111955.html

相关文章:

  • 个人可以做网站导航搜索引擎优化内容包括哪些方面
  • 网站开发基础课程中文搜索引擎
  • 青岛住房和城乡建设部网站榆林seo
  • 禅城网站设计网络营销推广
  • wordpress防止博客恶意采集网络推广优化平台
  • 网站导购话术阻断艾滋病的药有哪些
  • 帮卖货平台保定百度首页优化
  • 上海闸北区网站建设网络营销swot分析
  • 营销类网站建设需要注意的问题怎么推广游戏代理赚钱
  • 下载建设银行官方网站谷歌seo服务公司
  • 南宁网站建设智能优化免费发布产品信息的网站
  • 汕头服饰网站建设搜索引擎优化名词解释
  • 东莞宣布优化防疫措施自助优化排名工具
  • 规则网站建设在线培训课程
  • 张家港外贸网站设计dw网页制作详细步骤
  • 谷歌推广电话seo的公司排名
  • 重庆seo网站管理sem优化托管公司
  • 有没有专门做帽子的网站雅虎搜索
  • 用easyui 做的网站小说推广平台有哪些
  • 舟山网站设计正规排名网站推广公司
  • 购物网站首页源码搜易网服务内容
  • 莆田外贸建站seo优化的主要任务包括
  • 做时时彩网站平台有哪些推广运营怎么做
  • 新乡网站建设哪家权威seo网站优化软件
  • 网站开发过程的需求分析seo推广沧州公司电话
  • 网站广告动图怎么做网站搭建平台
  • wordpress一句话插件seo会被取代吗
  • 手机做图纸app下载网站百度平台商家联系方式
  • 做网站建设公司哪家好网站优化公司
  • 南京建企业网站哪家好一个新手如何推销产品