构建websocket服务
提到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服务相关推荐
- Node.js笔记-使用nodejs-websocket构建WebSocket服务
首先安装nodejs-websocket npm install nodejs-websocket 构造如下程序: wsServer.js var ws = require("nodejs- ...
- BeetleX之Websocket服务使用
BeetleX.FastHttpApi不仅是一个Webapi服务组件,它同时也是一个Websocket服务组件.由于BeetleX.FastHttpApi的实现是直接支持Websocket Upgra ...
- go tcp客户端自动重连_使用 Go 语言创建 WebSocket 服务
今天介绍如何用 Go 语言创建 WebSocket 服务,文章的前两部分简要介绍了 WebSocket 协议以及用 Go 标准库如何创建 WebSocket 服务.第三部分实践环节我们使用了 gori ...
- 使用Go语言创建WebSocket服务
今天介绍如何用Go语言创建WebSocket服务,文章的前两部分简要介绍了WebSocket协议以及用Go标准库如何创建WebSocket服务.第三部分实践环节我们使用了gorilla/websock ...
- 如何用Go语言创建WebSocket服务
WebSocket介绍 WebSocket通信协议通过单个TCP连接提供全双工通信通道.与HTTP相比,WebSocket不需要你为了获得响应而发送请求.它允许双向数据流,因此您只需等待服务器发送的消 ...
- 三分钟构建高性能 WebSocket 服务 | 超优雅的 SpringBoot 整合 Netty 方案
前言 每当使用SpringBoot进行Weboscket开发时,最容易想到的就是spring-boot-starter-websocket(或spring-websocket).它可以让我们使用注解, ...
- BeetleX实现MessagePack和Protobuf消息控制器调用websocket服务详解
最近有用户问如何使用BeetleX封装一个基于Protobuf格式的websocket服务并支持控制器调用:其实BeetleX.FastHttpApi是支持Websocket服务和自定义数据格式的,但 ...
- 使用BeetleX.NetBenchmark压测TCP,HTTP和Websocket服务
真没想到大过年还在家里写代码写文章,本来还打算自驾半个月没想出现这情况.在这里祝福全国同胞在新的一年里身体健康!希望阳光天气早日照射在这片土地上,给人带来新一年的希望! NetBenchmark是针对 ...
- python 3.5.2页面_Python 3.5.2实现websocket服务端
最近由于一个项目需要,写了一个简易的websocket服务端程序,其间也参考了网上的很多资料,我将用接下来的几个篇幅说明是怎么实现的,及遇到的一系列埂. 参考 (包括且不限于如下地址) 涉及到的模块 ...
最新文章
- UNIX--更改/输出当前工作目录
- 关于长江的题目_长江流域综合治理练习题
- OpenCV3.1.0+VS2015开发环境配置
- 基站数据库 mysql_基站位置数据库V2说明文档
- Python的输出、判断、循环函数:Luogu1014Cantor表
- jQuery框架的ajax
- 前端学习--使用canvas实现圆饼图
- Keytool 工具使用
- 让画面契合音乐节拍——BeatEdit
- Bugzilla windows安装
- 一、财务框架与基础知识
- 关于马克思《青年在选择职业时的考虑》的读书报告
- 亲自体验跑跑卡丁车2010年魔改单机版(附安装包)
- 1058. 选择题(20)-PAT乙级真题
- 2022最新面试题(含css、html、js、es6、Vue)
- android 上传nexus_上传 Android aar 到 nexus 上
- python中qt有哪些控件_PyQt5的基本控件整理
- CSS在线字体库,外部字体的引用方法@font-face
- OpenStack挂载ISO,安装原版windows
- File文件的属性设置
热门文章
- 九大操作系统掌门人齐聚岳麓,六代技术人跨代对话,共同见证技术大时代
- 两万字长文读懂 Java 集合!
- C Primer Plus怎样高效学?C语言大神案例值得借鉴!
- 市场占比 44%,IDC 最新报告:阿里云智能语音市场排名第一
- Electron 实战:前端人的最佳跨平台解决方案
- 享受梦幻技术盛宴,相约 Unite 2020
- 你不知道的 Web 性能优化 | 原力计划
- 我用 Python 破解了同事的加密压缩包!
- ofo 退押金出新招;快手回应“弃拼多多联手阿里”;Julia 1.3 发布 | 极客头条...
- 扎心!新浪年度报告:90后程序员月薪2万,没女朋友