前言
在现代 Web 开发中,实时的通讯方式越来越流行。而 Socket.IO 是一种非常流行的实时通讯技术。Sails.js 是一种使用 Socket.IO 的完整 Web 应用程序框架,也是一个用于构建 Node.js 中端应用的 MVC 框架。在 Sails.js 中,sails-hook-socket 是一个很重要的包,它提供了非常方便的应用程序开发方式。本文将讲解如何使用 npm 包 sails-hook-sockets。
简介
sails-hook-sockets 包是 Sails.js 的一个插件,它可以轻松地将 Socket.IO 集成到 Sails.js 应用程序中,极大地简化了编写实时应用程序的难度。sails-hook-sockets 库的主要优点有:
- 集成了 Socket.IO 库,你不用再去独立地引入 Socket.IO 库。
- 提供了非常方便的配置方式,简单易用。
- 支持 Sails.js 的所有功能。
安装
安装 sails-hook-sockets 的方式非常简单,只需要执行以下命令即可:
npm install sails-hook-sockets
使用
sails-hook-sockets 的使用非常容易,只需执行以下步骤:
- 配置
配置 sails.config.sockets 对象:
module.exports.sockets = { transports: ['websocket'], pingTimeout: 25000, onlyAllowOrigins: ['http://localhost:1337'], authorization: true, // ...Other Socket.IO options };
其中,transports: ['websocket'] 说明只开启 websocket 的传输协议,这也是 Socket.IO 最常用的一个传输协议;pingTimeout: 25000 表示超时时间为 25 秒;onlyAllowOrigins: ['http://localhost:1337'] 表示只允许从 http://localhost:1337 这个地址发起的请求;authorization 参数表示是否需要对服务进行身份验证,如果为 true,则需要客户端在连接时携带身份验证信息(如 cookie 、 token 等),这样服务端才能对身份进行验证,验证通过后才能建立连接。
- 创建/添加事件
在 sails.config.sockets.afterHooks 中设置响应事件,如:
module.exports.sockets = { afterHook: (sockets, cb) => { sails.log.verbose('Hook is fired'); sails.sockets.broadcast(sails.sockets.getId(socket), 'myEvent', { message: 'Hello!' }, socket); // ... handle events return cb(); }, };
其中,sails.sockets.broadcast 就是一个事件处理程序,可以将消息广播到所有连接到服务器的客户端;sails.sockets.getId(socket) 是一个函数,可以得到当前客户端的 socket id,也可以通过它实现点对点的消息传递。
- 启动
最后,在 Sails.js 项目的启动文件(如 app.js)中注册 hooks ,如下所示:
sails.hooks.sockets.load(); sails.hooks.sockets.start();
以上两行代码初始化 Socket 钩子并启动服务。
Demo:
-- -------------------- ---- ------- ---------------------- - - ----------- --------- --- -- - ------------------------- -- -------- ------------------------------- ---------- - -------- -------- --- ------ ----- - --
定于 myHook 钩子,使用 sails.sockets.broadcast(roomId, eventName, data [, ignoredSockets])
方法,向房间 room
推送数据。
结语
sails-hook-sockets 包为 Sails.js 应用程序提供了非常方便和快速的 Socket.IO 集成方式,使得开发者可以非常容易地实现实时的通讯功能。本文介绍了 sails-hook-sockets 的安装和使用方式,希望对开发者有所帮助。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/77210