问题
1️⃣ 重构赋值
- 代码一
const socketIO = require('socket.Io')
const Server = socketIO.Server
const server = new Server()
- 代码二
const {Server} = require('socket.Io')
const serve = new Server()
在这里的关键点就是{}
的作用,这里有一个概念就是“重构赋值”。
其实就是对于我们导出的模块socket.Io
,其实他是一个具有类的结构,他有很多方法比如socket.Io.Server
和socket.Io.client
等,如果我们用{Server}会直接取出.Server
类的方法,同样也会使代码更加简洁。
2️⃣ new Server()与 Server(server)的区别
在使用 Socket.IO 时,new Server()
和 Server(server)
的选择取决于你是否需要将 Socket.IO 与一个现有的 HTTP/HTTPS 服务器整合在一起。
两种方法的区别
特性 | new Server() | Server(server) |
---|---|---|
独立性 | 创建一个独立的 WebSocket 服务器 | 依赖于现有的 HTTP/HTTPS 服务器 |
端口复用 | 需要一个独立的端口 | HTTP 和 WebSocket 可共享同一端口 |
适用场景 | 单独运行的 WebSocket 服务或简单测试 | 与现有 HTTP/HTTPS 服务集成 |
常见用途 | 仅处理 WebSocket 连接 | WebSocket 与 REST API 或网页服务一起使用 |
如何选择
-
使用
new Server()
- 如果你仅需要运行一个简单的 Socket.IO 服务器,不涉及 HTTP 请求或 Express 路由。
- 测试或开发阶段快速启动 WebSocket 服务。
-
使用
Server(server)
- 如果你的项目需要同时支持 HTTP 请求(如 REST API)和 WebSocket。
- 如果你的服务需要通过一个端口提供综合功能(例如,Web 页面、API 和实时通信)。
总结
- 单独运行:用
new Server()
,适合独立 WebSocket 服务。 - 结合 HTTP/HTTPS:用
Server(server)
,适合需要同时处理 HTTP 请求和 WebSocket 的场景。
Socket.Io科普
1️⃣ 特点
-服务端和客户端的相互通信
客户端轮询
- 事件驱动编程
- 自动重连
- 房间和命名空间
- 房间可以让不同的用户进入,并让消息只在该房间广播
- 支持多个逻辑命名空间,以便在同一个服务器上实现多个模块功能
- 实时聊天
- 在线协作,同步更新
2️⃣ 应用场景
- 实时聊天应用
- 在线写作工具
- 试试通知系统
- 多人在线游戏
- 实时数据可视化
socket.on与io.on的区别
io.on
监听的所有客户端与服务端的过程,一旦新客户端与服务端连接则会产生一个socket
的事例,则这个socket
就来管理这个连接。