服务器websocket协议,WebSocket协议简介

前言

一、为什么需要 WebSocket?

WebSocket协议初学者,或许会有这样的疑惑:我们已经有了 HTTP 协议,为什么还需要另一个协议?它能带来什么好处?Http协议有哪些局限性?

1.HTTP的局限性

HTTP是半双工协议,也就是说,在同一时刻数据只能单向流动,客户端向服务器发送请求(单向的),然后服务器响应请求(单向的)。

服务器不能主动推送数据给浏览器。这就会导致一些高级功能难以实现,诸如聊天室场景就没法实现。

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

2.双向通信

这种单向请求的特点,注定了如果服务器有连续的状态变化,客户端要获知就非常麻烦。在WebSocket协议之前,有三种实现双向通信的方式:轮询(polling)、长轮询(long-polling)和iframe流(streaming)。

1)轮询

轮询是客户端和服务器之间会一直进行连接,每隔一段时间就询问一次

这种方式连接数会很多,一个接受,一个发送。而且每次发送请求都会有Http的Header,会很耗流量,也会消耗CPU的利用率

2)长轮询

长轮询是对轮询的改进版,客户端发送HTTP给服务器之后,看有没有新消息,如果没有新消息,就一直等待

当有新消息的时候,才会返回给客户端。在某种程度上减小了网络带宽和CPU利用率等问题。

由于http数据包的头部数据量往往很大(通常有400多个字节),但是真正被服务器需要的数据却很少(有时只有10个字节左右),这样的数据包在网络上周期性的传输,难免对网络带宽是一种浪费

3)iframe流

通过在HTML页面里嵌入一个隐藏的iframe,然后将这个iframe的src属性设为对一个长连接的请求,服务器端就能源源不断地往客户推送数据。

二、什么是WebSocket?

一旦Web服务器与客户端之间建立起WebSocket协议的通信连接,之后所有的通信都依靠这个专用协议进行。通信过程中可互相发送JSON、XML、HTML或图片等任意格式的数据。由于是建立在HTTP基础上的协议,因此连接的发起方仍是客户端,而一旦确立WebSocket通信连接,不论服务器还是客户端,任意一方都可直接向对方发送报文。

三、WebSocket的特点

支持双向通信,实时性更强。

更好的二进制支持。

较少的控制开销。连接创建后,ws客户端、服务端进行数据交换时,协议控制的数据包头部较小。。

四、WebSocket的实战

服务端代码

let express = require('express');

const path = require('path');

let app = express();

let server = require('http').createServer(app);

app.get('/', function (req, res) {

res.sendFile(path.resolve(__dirname, 'index.html'));

});

app.listen(3000);

//-----------------------------------------------

let WebSocketServer = require('ws').Server;

let wsServer = new WebSocketServer({ port: 8888 });

wsServer.on('connection', function (socket) {

console.log('连接成功');

socket.on('message', function (message) {

console.log('接收到客户端消息:' + message);

socket.send('服务器回应:' + message);

});

});

客户端代码

参考文章

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值