服务端

  1. const WebSocket = require('ws');//引入模块
  2. const wss = new WebSocket.Server({ port: 8080 });//创建一个WebSocketServer的实例,监听端口8080
  3. wss.on('connection', function connection(ws) {
  4. ws.on('message', function incoming(message) {
  5. console.log('received: %s', message);
  6. ws.send('Hi Client');
  7. });//当收到消息时,在控制台打印出来,并回复一条信息
  8. });

客户端

  1. const WebSocket = require('ws');
  2. const ws = new WebSocket('ws://localhost:8080');
  3. ws.on('open', function open() {
  4. ws.send('Hi Server');
  5. });//在连接创建完成后发送一条信息
  6. ws.on('message', function incoming(data) {
  7. console.log(data);
  8. });//当收到消息时,在控制台打印出来
  • WebSocket先发起一个HTTP请求,成功后再升级到WebSocket协议,再进行通信

webSocket 和 http 区别

  • 协议名称不同 wshttp
  • http 一般只能浏览器发起请求,webSocket 可以双端发起请求
  • webSocket 无跨域限制
  • webSocket 通过 sendonmessage 进行通讯,http 通过 reqres 通讯

PS:ws 可以升级为 wss 协议,像 http 升级到 https 一样,增加 SSL 安全协议

  1. import { createServer } from 'https'
  2. import { readFileSync } from 'fs'
  3. import { WebSocketServer } from 'ws'
  4. const server = createServer({
  5. cert: readFileSync('/path/to/cert.pem'),
  6. key: readFileSync('/path/to/key.pem')
  7. })
  8. const wss = new WebSocketServer({ server })

PS:如果做项目开发,推荐使用 socket.io,API 更方便。

  1. io.on('connection', socket => {
  2. // emit an event to the socket
  3. socket.emit('request', /* … */)
  4. // emit an event to all connected sockets
  5. io.emit('broadcast', /* … */)
  6. // listen to the event
  7. socket.on('reply', () => { /* … */ })
  8. })