websocket初探

作者: 李博洋li | 来源:发表于2018-03-16 16:36 被阅读5次
今天是想分享一下关于websocket在nodejs里面的相关实践。

websocket相关的知识大家在搜索引擎上一搜就可以看到非常多,包括成长过程,规范化,替代方案等等都有非常多的介绍,这些我就不介绍了,我会说一下我这次为什么会用到websocket和一个简单的demo。
我这次的业务场景是在页面上展示几台不同的机器的实时运行数据,数据由机器上的传感器上传到数据库中,一般周期为5秒上传一个新的数据,我的前端页面也是这样的一个周期用图表的形式去展示这部分数据(这一部分跟传感器上传数据的事件有些许延迟是没有问题的),图表展示用的是highcharts,我个人还是挺喜欢这个图表库的哈哈。然后顺手在公司原有的highcharts封装的基础上又做了一个实时展示的封装,之后再拿出来分享一下~
nodejs端我用的是ws的依赖,看了下github大概8000star,最近的维护时间是3天前,看起来还是挺靠谱的,用起来也比较顺手,nodejs我用的express服务端渲染的方式来做。

nodejs代码
const WebSocket = require('ws');
const wss = new WebSocket.Server({ port: 8080 });
//……中间省略若干……
wss.on('connection', function connection(ws, req) {
   ws.on('message', function incoming(message) {
      //console.log('received: %s', message);
        //这里我用了随机数来模拟服务端的真实数据,事实上需要调用不同的接口来提供数据
        setInterval(function(){
            var a = parseInt(Math.random() * 20)
               ws.send(a);
        },1500)
   });
});
前端代码
var ws1 = new WebSocket("ws://localhost:8080");

ws1.onopen = function(evt) { 
   console.log("Connection open ..."); 
   ws1.send("Hello WebSockets!");
};

ws1.onmessage = function(evt) {
   //实验用的input
   $('input').val(evt.data)
};

然后在前端页面上就按照制定间隔的不停变化inp里面的数据。
这就可以了……?🙄🙄🙄真的吗。。。
当然不是啦,会用这个只能做出来业务啊喂,里面深层次的东西还是要好好学习的啊喂🤩虽然没有深究,最近也比较忙……还是整理了一些

推荐大家看一下这篇文章:
WebSocket 是什么原理?为什么可以实现持久连接? - Ovear的回答 - 知乎
这里面讲的非常通俗易懂,也很容易明白,另外,顺便安利一下其他替代方案

1、轮询

这种方式是按照一定的时间间隔去发送网络请求,场景再现就是


轮询.png

这样的网络开销非常大,一是不停发请求,在网络情况不好的时候可能就比较惨不忍睹,二是需要服务器有很快的处理速度和资源,有更好的方式为什么还要用这种呢😑

2、长轮询

长轮询是第二代的轮询………………😑大概是进化过的轮询吧,这种方式是个阻塞I/O,长轮询的原理是我发起了一个请求,如果确实有结果返回给我了那我就结束本次轮询,接着发起一次新的轮询;如果这次没有结果,那么我就挂起,一直等待服务器给我一个结果为止,看起来很痴情啊喂。


长轮询.png
3、websocket

这两种都存在各种各样的问题,这个时候就是websocket出场的时候啦啊哈哈哈


websocket

当我们用websocket建立connection之后,服务器就可以源源不断的将各种各样的响应发到客户端,建立了‘双工通信’,而且现在各大浏览器支持的也非常好(不要跟我提IE,前端应该放弃IE。。。。🌚)所以大家在遇到这样需要服务器频繁向客户都按发数据的时候可以考虑这种实现方式~

相关文章

  • 2020-04-03

    ## webSocket初探 ## 目录 - 为什么WebSocket - 什么是WebSocket - WebS...

  • websocket初探

    Websocket 是什么? WebSocket协议是基于TCP的一种新的网络协议。它实现了浏览器与服务器全双工(...

  • websocket初探

    今天是想分享一下关于websocket在nodejs里面的相关实践。 websocket相关的知识大家在搜索引擎上...

  • Websocket初探

    Websocket是一种在单个TCP连接上进行全双工通信的网络协议,是HTML5新增的协议。那么为何要使用Webs...

  • webSocket初探

    一、WebSocket介绍与原理 WebSocket protocol 是HTML5一种新的协议。它实现了浏览器与...

  • 初探和实现websocket心跳重连

    初探和实现websocket心跳重连 心跳重连缘由 在使用websocket过程中,可能会出现网络断开的情况,比如...

  • WebSocket 初探(一)

    WebSocket WebSocket protocol 是HTML5一种新的协议。它实现了浏览器与服务器全双工通...

  • WebSocket 协议初探

    前言 公司项目使用WebSocket作为主要的请求方式,知其然也要知其所以然,会用也需要知道它的基本原理,所以写此...

  • websocket初探学习分享

    本文主要是使用的心得,参考的网址是websocket,本例中使用的是Websocket-Node 服务器模式,本地...

  • WebSocket使用初探(Tornado+Nginx)

    使用场景 在web开发中有时候需要实时获取数据,可以采用的方法也很多,比如ajax轮询,长连接等。之前项目中有一个...

网友评论

    本文标题:websocket初探

    本文链接:https://www.haomeiwen.com/subject/djcrqftx.html