服务端
const WebSocket = require('ws');//引入模块
const wss = new WebSocket.Server({ port: 8080 });//创建一个WebSocketServer的实例,监听端口8080
wss.on('connection', function connection(ws) {
ws.on('message', function incoming(message) {
console.log('received: %s', message);
ws.send('Hi Client');
});//当收到消息时,在控制台打印出来,并回复一条信息
});
客户端
const WebSocket = require('ws');
const ws = new WebSocket('ws://localhost:8080');
ws.on('open', function open() {
ws.send('Hi Server');
});//在连接创建完成后发送一条信息
ws.on('message', function incoming(data) {
console.log(data);
});//当收到消息时,在控制台打印出来
- WebSocket先发起一个HTTP请求,成功后再升级到WebSocket协议,再进行通信
webSocket 和 http 区别
- 协议名称不同
ws
和http
- http 一般只能浏览器发起请求,webSocket 可以双端发起请求
- webSocket 无跨域限制
- webSocket 通过
send
和onmessage
进行通讯,http 通过req
和res
通讯
PS:ws
可以升级为 wss
协议,像 http
升级到 https
一样,增加 SSL
安全协议
import { createServer } from 'https'
import { readFileSync } from 'fs'
import { WebSocketServer } from 'ws'
const server = createServer({
cert: readFileSync('/path/to/cert.pem'),
key: readFileSync('/path/to/key.pem')
})
const wss = new WebSocketServer({ server })
PS:如果做项目开发,推荐使用 socket.io,API 更方便。
io.on('connection', socket => {
// emit an event to the socket
socket.emit('request', /* … */)
// emit an event to all connected sockets
io.emit('broadcast', /* … */)
// listen to the event
socket.on('reply', () => { /* … */ })
})