了解socket.io的用法

155 阅读3分钟

vue3+ts项目中使用

1.安装依赖

// 注意:客户端和服务端版本一定要兼容,尽量一样
npm i socket.io-client -S 

2.连接

`socket.io-client` 提供了丰富的配置选项,以适应不同的使用场景和网络环境。以下是一些常见的配置参数及其说明:

1. autoConnect:
   - 默认值: `true`
   - 描述: 是否在实例化时自动连接到服务器。设置为 `false` 可以手动控制连接的建立。

2. forceNew:
   - 默认值: `false`
   - 描述: 是否强制创建一个新的连接,忽略任何现有的连接。

3. multiplex:
   - 默认值: `true`
   - 描述: 是否允许多个 Socket.IO 客户端在同一个 HTTP 连接上多路复用。

4. path:
   - 默认值: `/socket.io`
   - 描述: 指定 Socket.IO 连接的 URL 路径。

5. reconnection:
   - 默认值: `true`
   - 描述: 是否在连接断开后自动尝试重新连接。

6. reconnectionAttempts:
   - 默认值: `Infinity`
   - 描述: 最大的重连尝试次数。

7. reconnectionDelay:
   - 默认值: `1000`
   - 描述: 重连尝试之间的初始延迟时间(毫秒)。

8. reconnectionDelayMax:
   - 默认值: `5000`
   - 描述: 重连尝试之间的最大延迟时间(毫秒)。

9. randomizationFactor:
   - 默认值: `0.5`
   - 描述: 重连延迟的随机化因子,范围在 01 之间。

10. timeout:
    - 默认值: `20000`
    - 描述: 连接超时时间(毫秒)。

11. transports:
    - 默认值: `['polling', 'websocket']`
    - 描述: 指定尝试的传输方式列表。

12. query:
    - 默认值: `{}`
    - 描述: 发送到服务器的附加查询参数。

13. extraHeaders:
    - 默认值: `{}`
    - 描述: 发送到服务器的附加 HTTP 头部。

14. agent:
    - Node.js 专有,描述: 用于控制请求的 HTTP Agent15. pfx, key, passphrase, cert, ca:
    - Node.js 专有,描述: SSL/TLS 相关的配置。

16. ciphers:
    - Node.js 专有,描述: 指定使用的加密算法。

17. rejectUnauthorized:
    - Node.js 专有,描述: 是否拒绝未经授权的证书。

18. perMessageDeflate:
    - Node.js 专有,描述: 是否启用 WebSocket 消息的每条消息压缩。

19. localAddress:
    - Node.js 专有,描述: 用于绑定网络接口的本地地址。

20. parser:
    - 描述: 自定义的解析器,用于替代默认的 Socket.IO 消息解析器。

请注意,某些参数是 Node.js 特有的,可能不会在浏览器环境中使用。在使用这些参数时,请确保它们适合你的运行环境。

import { io, Socket } from 'socket.io-client'
import { ref } from 'vue'
let socket = ref<Socket | null>(null)
let token = 'abc123'

socket.value = io('', {
    transports: ['websocket'],
    query: { token }
})

3.事件监听

//监听是否连接成功
socket.value.on('connect', () => {
    console.log('Socket connected!')
})
//监听是否连接失败
socket.value!.on('disconnect', () => {
    console.log('Socket disconnect!')
})

4.发送、接收、断开事件

//发送事件
socket.value.send({ 
    message: 'Hello World' 
});
//接收事件
socket.value.on('message', (data) => { 
    console.log(data); 
});

//指定事件
//发送指定事件
socket.value.emit('runningstate', { 
    message: 'runningstate' 
})
socket.value.emit('picture', { 
    message: 'picture' 
})
//接收指定事件数据
socket.value.on('runningstate', (data) => {
    console.log(data)
})
socket.value.on('picture', (data) => {
    console.log(data)
})
//断开指定事件
socket.value.off('runningstate')
socket.value.off('picture')

5.断开连接

socket.value.disconnect()

node.js中使用

1.安装依赖

npm i socket.io --save   
npm i express --save

2.使用

const express = require('express');
const app = express();
const http = require('http');
const server = http.createServer(app);
const { Server } = require("socket.io");
const io = new Server(server, {
  cors: {
    origin: ['http://localhost:8081']  // 配置客户端可跨域地址
  }
});
io.on('connection', (socket) => {
  console.log('接收到客户端请求');
  socket.on('runningstate', (msg, callback) => {
    console.log('客户端请求信息', msg);
    callback('你请求成功了')
    io.emit('runningstate', {
      status: 200,
      data: 'result'
    });
  });
  socket.on('picture', (msg, callback) => {
    console.log('客户端请求信息', msg);
    callback('你请求成功了')
    io.emit('picture', {
      status: 200,
      data: 'result'
    });
  });
})

server.listen(6789, () => {
  console.log('listening on *:6789');
});

简单使用:新建一个node-demo.js文件,复制代码,安装依赖,执行node node-demo.js