npm 包 @maritz/garageserver.io 使用教程

阅读时长 9 分钟读完

简介

@maritz/garageserver.io 是一个基于 Node.js 的 WebSocket 实时通讯服务,支持多种协议 (ws, uws, socket.io) 和高并发的客户端连接,适用于实时共享数据、二进制数据传输、游戏等场景。

安装和引入

使用 npm 安装:

引入 garageserver:

创建 garageserver 实例

garageserver 实例详解

garageserver(options: garageserverOptions)

创建 garageserver 实例需要传入一个 options 对象,它可以包含以下属性:

  • port: 监听的端口号。
  • ws: 是否开启 WebSocket。
  • uws: 是否开启 uWebSockets。
  • path: WebSocket 构造函数的 path 参数。
  • pathError: 路径错误时的响应函数。
  • serveClient: 是否提供客户端文件。
  • pingInterval: ping 客户端的间隔时间(毫秒)。
  • pingTimeout: ping 超时时间(毫秒)。
  • perMessageDeflate: 是否启用 PermessageDeflate 扩展。
  • maxHttpBufferSize: HTTP 请求消息的最大大小。
  • makeUpgradeReq: WebSocket 升级请求生成函数。
  • beforeConnect: 在握手之前调用的函数。
  • afterConnect: 在握手之后调用的函数。
  • cors: 是否启用跨域资源共享。
  • allowRequest: 允许请求的函数。
  • httpCompression: 是否启用 http 压缩。
  • cookie: 定义在客户端/服务器协商的会话中使用的 Cookie 名称。
  • perMessageDeflateOptions: PermessageDeflate 扩展的选项。
  • transports: 可用的传输方法(默认为 ['polling', 'websocket'])。
  • allowUpgrades: 是否允许传输升级。
  • maxHttpHeaderSize: HTTP 请求头部的最大大小。
  • forceWebsockets: 强制使用 WebSocket 协议。
  • httpCompressionOptions: http 压缩的选项。

garageserver.set

用于在 garageserver 实例上设置全局属性:

garageserver.engine

设置 WebSocket 实现引擎的名称:

garageserver.on

监听 garageserver 实例的事件:

garageserver 实例的方法

garageserver.to (room: string): SocketNamespace

获取房间 room 的 SocketNamespace:

garageserver.adapter

获取 garageserver 实例的适配器:

garageserver.of (namespace: string): SocketNamespace

获取命名空间 namespace 的 SocketNamespace:

garageserver.emit

发送一个事件给全体 Socket:

garageserver.close

关闭 garageserver 实例:

SocketNamespace 实例详解

SocketNamespace.clients

获取命名空间中所有 Socket 的数组。

SocketNamespace.emit

发送一个事件给命名空间内的所有 Socket:

SocketNamespace.connected

获取命名空间中所有连通的 Socket 的数组。

SocketNamespace.adapter

获取命名空间的适配器。

SocketNamespace.name

获取命名空间的名称。

SocketNamespace.use

在命名空间 Middleware 中使用函数:

socket 实例详解

socket.id

获取 socket 的唯一标识符。

socket.emit

发送一个事件给该 Socket:

socket.join

加入房间:

socket.leave

离开房间:

socket.disconnect

关闭该 Socket 的连接。

socket.to (room: string): SocketNamespace

获取房间 room 的 SocketNamespace。

socket.broadcast

发送一个事件给所有连接的 Socket,但该事件不包含当前的 Socket。

socket.rooms

获取当前 Socket 所在的房间。

示例代码

发送消息

-- -------------------- ---- -------
----- ------------ - -----------------------------------
----- ------ - -------------- ----- ---- ---

----------------------- ------ -- -
  ------------------- ------------ ------------

  -------------------- --- -- -
    ------------------- ------------ - ---------
    --------------------- ------------- ----- ---------
  ---
---

加入和离开房间

-- -------------------- ---- -------
----- ------------ - -----------------------------------
----- ------ - -------------- ----- ---- ---

--- -------- - --------

----------------------- ------ -- -
  ------------------- ------------ ------------

  ----------------- -- -- -
    ----------------------
    ------------------- ------------ ------ --------------
  ---

  ------------------ -- -- -
    -----------------------
    ------------------- ------------ ---- --------------
  ---

  -------------------- --- -- -
    ------------------- ------------ - ---------
    ---------------------------------- ------------- ----- ---------
  ---
---

使用 middleware

-- -------------------- ---- -------
----- ------------ - -----------------------------------
----- ------ - -------------- ----- ---- ---

------------------- ----- -- -
  ------------------------- ------------
  -------
---

----------------------- ------ -- -
  ----------------------- -- -- -
    ------------------------- ---------------
  ---

  -------------------- --- -- -
    ------------------- ------------ - ---------
    --------------------- ------------- ----- ---------
  ---
---

结语

@maritz/garageserver.io 对于实时通信和高并发连接场景下的 Node.js 后端开发,是一个不错的选择,相信大家能够快速上手并使用起来。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/60066bca967216659e24462c

纠错
反馈