Socket.io 是一种实时通信框架,它允许使用 Node.js 在实现基于事件的双向通信的同时支持 WebSocket 和 HTTP 传输的跨浏览器和跨平台通信。Fastify 是一个快速、低开销和灵活的 Node.js web 框架,支持在单个应用程序下同时运行多个 Socket.io 连接。
在本文中,我们将探讨如何在 Fastify 中使用 Socket.io 并实现一个简单的聊天应用程序。
1. 准备工作
在开始之前,确保你已经安装了 Node.js 和 npm 包管理器。然后,使用以下命令安装 Fastify、Socket.io 和相关依赖:
npm install fastify fastify-static socket.io fastify-socket.io
2. 实现聊天应用程序
在开始实现之前,请导入必要的库和文件。和以下代码类似:
const fastify = require('fastify')(); const socket = require('socket.io');
在 Fastify 应用程序初始化中,添加 Socket.io server 并启动应用程序监听:
// javascriptcn.com 代码示例 const io = socket(fastify.server); io.on('connection', function(socket) { console.log('a user connected'); socket.on('disconnect', function(){ console.log('user disconnected'); }); }); fastify.listen(3000, function (err, address) { if (err) { console.error(err); process.exit(1); } console.log(`Server listening on ${address}`); });
这个例子演示了一个简单的 Socket.io 服务器,它监听断开连接和连接事件。实现连接事件,我们可以在客户端连接时执行一些代码,如下所示:
io.on('connection', function(socket) { console.log('a user connected'); socket.on('disconnect', function(){ console.log('user disconnected'); }); });
接下来,我们创建一个简单的前端页面,允许用户输入名称和发送消息。该页面通过一个 HTML 页面和一个 JS 文件来实现,如下所示:
index.html
// javascriptcn.com 代码示例 <!DOCTYPE html> <html> <head> <title>Socket.IO chat</title> <style> * { margin: 0; padding: 0; box-sizing: border-box; } body { font: 13px Helvetica, Arial; } form { background: #000; padding: 3px; position: fixed; bottom: 0; width: 100%; } form input { border: 0; padding: 10px; width: 90%; margin-right: .5%; } form button { width: 9%; background-color: rgb(130, 224, 255); border: none; padding: 10px; } #messages { list-style-type: none; margin: 0; padding: 0; } #messages li { padding: 5px 10px; } #messages li:nth-child(odd) { background: #eee; } </style> </head> <body> <ul id="messages"></ul> <form> <input id="input" autocomplete="off" /><button>Send</button> </form> <script src="/socket.io/socket.io.js"></script> <script src="http://code.jquery.com/jquery-1.11.1.js"></script> <script> var socket = io(); $('form').submit(function(e){ e.preventDefault(); // prevents page reloading socket.emit('chat message', $('#input').val()); $('#input').val(''); return false; }); socket.on('chat message', function(msg){ $('#messages').append($('<li>').text(msg)); }); </script> </body> </html>
在这个代码示例中,我们首先导入了 Socket.io 客户端库和 jQuery 库。为了初始化 Socket.io,创建了一个 Socket.io 对象,并在输入框提交时向服务器发送聊天消息,最后显示所有聊天消息的 ul 元素。在这个示例中,服务器不仅能够响应连接和断开连接事件,而且可以接收并传递 chat message 事件,该事件在客户端发送一条新消息时触发。
app.js
// javascriptcn.com 代码示例 const fastify = require('fastify')(); const socket = require('socket.io'); fastify.register(require('fastify-static'), { root: __dirname, prefix: '/' // optional: default '/' }); const io = socket(fastify.server); io.on('connection', function(socket) { console.log('a user connected'); socket.on('disconnect', function(){ console.log('user disconnected'); }); socket.on('chat message', function(msg){ console.log('message: ' + msg); io.emit('chat message', msg); }); }); fastify.listen(3000, function (err, address) { if (err) { console.error(err); process.exit(1); } console.log(`Server listening on ${address}`); });
在这个代码示例中,我们注册了一个 fastify-static 插件并配置了静态网站的根目录。添加 Socket.io server 后,初始化了连接和断开连接事件,并添加了 chat message 事件,以便接收和广播每一条聊天消息。在接收到 chat message 事件后,我们广播该事件以便将消息发送给所有连接的客户端。
3. 测试和运行
完成应用程序代码实现之后,使用以下命令运行应用程序:
node app.js
打开浏览器并访问 http://localhost:3000,将看到一个简单的聊天应用程序,其中允许用户输入消息、发送消息和查看所有聊天消息。当用户连接或断开连接时,服务器将显示信息,以显示用户是否连接或断开连接。当用户发送消息时,服务器将广播 chat message 事件以便将消息发送给所有连接的客户端。
4. 总结
在本文中,我们探讨了如何在 Fastify 中使用 Socket.io 来实现实时聊天应用程序。我们首先介绍了准
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/654647967d4982a6eb025db7