上篇介绍了Http协议,本篇介绍WebSocket通信协议。与Http协议“被动”通信相比,WebSocket服务端可以“主动”向客户端推送消息。另外,WebSocket是实时通信的。
【注意】WebSocket协议不适合那些不支持HTML5或对HTML5支持不够充分的浏览器。
首先,安装支持websocket通信协议的模块ws。
服务端代码如下
/**
* websocket服务端
*/
//加载ws模块
const WebSocket = require("ws");
const server = new WebSocket.Server({port:8080},()=>{
console.log("WebSocket服务器正在监听8080端口");
});
//连接时
server.on("connection",(ws)=>{
ws.on("message",(msg)=>{
console.log("客户端传来的消息:",msg.toString());
ws.send("你好,你的消息我已经收到了!");
});
});
//错误异常监听
server.on("error",(err)=>{
console.error("服务器错误:"+err.message);
});
//服务器关闭事件监听
server.on("close",()=>{
console.log("服务器关闭!");
});
客户端代码如下
/**
* WebSocket客户端
*/
const WebSocket = require("ws");
//客户端创建
const client = new WebSocket("ws://localhost:8080");
//建立连接时
client.on("open",()=>{
console.log("已经连接上服务器!");
client.send("现在客户端时间:"+Date.now());
});
//断开连接时
client.on("close",()=>{
console.log("连接已断开!");
});
//监听服务器返回消息
client.on("message",(data)=>{
console.log("服务器返回的消息:"+data);
});
//错误异常
client.on("error",(err)=>{
console.error("客户端错误:"+err.message);
});
运行结果如下:
【服务端】
【客户端】
之后介绍的Express框架时,会介绍WebSocket的加强版Socket.IO,是一个支持客户端与服务器之间实时、双向、基于事件的通信的库。因为可以让那些不支持WebSocket协议的浏览器会将WebSocket连接自动降为Ajax连接,所以可以保证最大限度地的兼容性。它的目标是统一通信机制,使所有浏览器和移动设备都可以进行实时通信,为开发者提供客户端与服务器端一致的编程体验。