一、简介
WebSocket是HTML5中的协议,支持持久连接。websocket的最大特点就是,客户端可以主动向服务器发送信息,服务器也可以主动向客户端发送信息,是真正的双向平等对话,属于服务器推送技术的一种。(区别于传统http的 request-response 轮询机制)
二、特点
- 也是基于TCP,在连接建立阶段使用http协议,主要涉及的请求header
Connection: Upgrade
Upgrade: websocket
(http/1.0: 短连接;http/1.1: 长连接Connection: keep-alive
;websocket: 持久连接) - 协议标识是ws(加密则是wss)
ws://127.0.0.1:8081
- 主要使用80或443端口
- 没有同源限制,客户端可以与任意服务器通信
三、阮一峰websocket详细介绍以及前端实现方法
四、简单实现websocket(客户端Vue, 服务器Node)
/* 客户端 */
methods: {
socketClient(){
// 创建websocket对象
const websocket = new Websocket('ws://127.0.0.1:8081')
// 事件监听
websocket.onopen = () => {
console.log('[CLIENT] connected')
}
websocket.onclose = () => {
console.log('[CLIENT] closed')
}
websocket.onerror = () => {
console.log('[CLIENT] error')
}
// 接收服务器消息
websocket.onmessage = msg => {
console.log('[CLIENT] received: ' + msg.data)
}
// 向服务器发送消息
setTimeout(() => {
websocket.send('hello!')
}, 2000)
}
}
/* 服务器 */
// 导入WebSocket模块:
const WebSocket = require('ws');
// 引用Server类:
const WebSocketServer = WebSocket.Server;
// 创建Server对象
const wss = new WebSocketServer({
port: 8081
})
wss.on('connection', function (ws) {
console.log(`[SERVER] connected`);
// 监听客户端消息
ws.on('message', function (message) {
console.log(`[SERVER] received: ${message}`);
})
// 向客户端发送消息
setTimeout(() => {
ws.send('连接已创建5000ms!', (err) => {
if (err) {
console.log(`[SERVER] error: ${err}`);
}
})
}, 5000)
});