提到Node,不能错过的是WebSocket协议。它与Node之间的配合堪称完美,其理由有两条。

No.1

WebSocket客户端基于事件的编程模型与Node中自定义事件相差无几。

No.2

WebSocket实现了客户端与服务器端之间的长连接,而Node事件驱动的方式十分擅长与大量的客户端保持高并发连接。

除此之外,WebSocket与传统HTTP有如下好处。

No.1

客户端与服务器端只建立一个TCP连接,可以使用更少的连接。

No.2

WebSocket服务器端可以推送数据到客户端,这远比HTTP请求响应模式更灵活、更高效。

No.3

有更轻量级的协议头,减少数据传送量。

现代浏览器大多都支持WebSocket协议,接下来我们用一段代码来展现WebSocket在客户端的应用示例:

let socket

= new WebSocket('ws://127.0.0.1:8080/updates');

socket.onopen = function () {

setInterval(function () {

if (socket.bufferedAmount == 0)

socket.send(getUpdateData());

}, 50);

};

socket.onmessage = function (event) {

// TODO:event.data

};

上述代码中,浏览器与服务器端创建WebSocket协议请求,在请求完成后连接打开,每50毫秒向服务器端发送一次数据,同时可以通过 onmessage()方法接收服务器端传来的数据。这行为与TCP客户端十分相似,相较于HTTP,它能够双向通信。浏览器一旦能够使用WebSocket,可以想象应用的使用空间极大。

在WebSocket之前,网页客户端与服务器端进行通信最高效的是Comet技术。实现Comet技术的细节是采用长轮询(long-polling)或iframe流。长轮询的原理是客户端向服务器端发起请求,服务器端只在超时或有数据响应时断开连接( res.end() );客户端在收到数据或者超时后重新发起请求。

使用WebSocket的话,网页客户端只需一个TCP连接即可完成双向通信,在服务器端与客户端频繁通信时,无须频繁断开连接和重发请求。连接可以得到高效应用,编程模型也十分简洁。

前文也或多或少提到了WebSocket与HTTP的区别,相比HTTP,WebSocket更接近于传输层协议,它并没有在HTTP的基础上模拟服务器端的推送,而是在TCP上定义独立的协议。让人迷惑的部分在于WebSocket的握手部分是由HTTP完成的,使人觉得它可能是基于HTTP实现的。

WebSocket协议主要分为两个部分:握手和数据传输。之后我们来详细说一说这两个部分。

构建websocket服务相关推荐

  1. Node.js笔记-使用nodejs-websocket构建WebSocket服务

    首先安装nodejs-websocket npm install nodejs-websocket 构造如下程序: wsServer.js var ws = require("nodejs- ...

  2. BeetleX之Websocket服务使用

    BeetleX.FastHttpApi不仅是一个Webapi服务组件,它同时也是一个Websocket服务组件.由于BeetleX.FastHttpApi的实现是直接支持Websocket Upgra ...

  3. go tcp客户端自动重连_使用 Go 语言创建 WebSocket 服务

    今天介绍如何用 Go 语言创建 WebSocket 服务,文章的前两部分简要介绍了 WebSocket 协议以及用 Go 标准库如何创建 WebSocket 服务.第三部分实践环节我们使用了 gori ...

  4. 使用Go语言创建WebSocket服务

    今天介绍如何用Go语言创建WebSocket服务,文章的前两部分简要介绍了WebSocket协议以及用Go标准库如何创建WebSocket服务.第三部分实践环节我们使用了gorilla/websock ...

  5. 如何用Go语言创建WebSocket服务

    WebSocket介绍 WebSocket通信协议通过单个TCP连接提供全双工通信通道.与HTTP相比,WebSocket不需要你为了获得响应而发送请求.它允许双向数据流,因此您只需等待服务器发送的消 ...

  6. 三分钟构建高性能 WebSocket 服务 | 超优雅的 SpringBoot 整合 Netty 方案

    前言 每当使用SpringBoot进行Weboscket开发时,最容易想到的就是spring-boot-starter-websocket(或spring-websocket).它可以让我们使用注解, ...

  7. BeetleX实现MessagePack和Protobuf消息控制器调用websocket服务详解

    最近有用户问如何使用BeetleX封装一个基于Protobuf格式的websocket服务并支持控制器调用:其实BeetleX.FastHttpApi是支持Websocket服务和自定义数据格式的,但 ...

  8. 使用BeetleX.NetBenchmark压测TCP,HTTP和Websocket服务

    真没想到大过年还在家里写代码写文章,本来还打算自驾半个月没想出现这情况.在这里祝福全国同胞在新的一年里身体健康!希望阳光天气早日照射在这片土地上,给人带来新一年的希望! NetBenchmark是针对 ...

  9. python 3.5.2页面_Python 3.5.2实现websocket服务端

    最近由于一个项目需要,写了一个简易的websocket服务端程序,其间也参考了网上的很多资料,我将用接下来的几个篇幅说明是怎么实现的,及遇到的一系列埂. 参考 (包括且不限于如下地址) 涉及到的模块 ...

最新文章

  1. UNIX--更改/输出当前工作目录
  2. 关于长江的题目_长江流域综合治理练习题
  3. OpenCV3.1.0+VS2015开发环境配置
  4. 基站数据库 mysql_基站位置数据库V2说明文档
  5. Python的输出、判断、循环函数:Luogu1014Cantor表
  6. jQuery框架的ajax
  7. 前端学习--使用canvas实现圆饼图
  8. Keytool 工具使用
  9. 让画面契合音乐节拍——BeatEdit
  10. Bugzilla windows安装
  11. 一、财务框架与基础知识
  12. 关于马克思《青年在选择职业时的考虑》的读书报告
  13. 亲自体验跑跑卡丁车2010年魔改单机版(附安装包)
  14. 1058. 选择题(20)-PAT乙级真题
  15. 2022最新面试题(含css、html、js、es6、Vue)
  16. android 上传nexus_上传 Android aar 到 nexus 上
  17. python中qt有哪些控件_PyQt5的基本控件整理
  18. CSS在线字体库,外部字体的引用方法@font-face
  19. OpenStack挂载ISO,安装原版windows
  20. File文件的属性设置

热门文章

  1. 九大操作系统掌门人齐聚岳麓,六代技术人跨代对话,共同见证技术大时代
  2. 两万字长文读懂 Java 集合!
  3. C Primer Plus怎样高效学?C语言大神案例值得借鉴!
  4. 市场占比 44%,IDC 最新报告:阿里云智能语音市场排名第一
  5. Electron 实战:前端人的最佳跨平台解决方案
  6. 享受梦幻技术盛宴,相约 Unite 2020
  7. 你不知道的 Web 性能优化 | 原力计划
  8. 我用 Python 破解了同事的加密压缩包!
  9. ofo 退押金出新招;快手回应“弃拼多多联手阿里”;Julia 1.3 发布 | 极客头条...
  10. 扎心!新浪年度报告:90后程序员月薪2万,没女朋友