Node.JS JavaScript socket.io 在微服务架构中发出消息
Posted
技术标签:
【中文标题】Node.JS JavaScript socket.io 在微服务架构中发出消息【英文标题】:Node.JS JavaScript socket.io emit message in microservices architecture 【发布时间】:2022-01-19 16:27:50 【问题描述】:我正在尝试使用 Socket.io 和 javascript 在 Node.JS 中创建通知功能。
app.js(入口脚本)导入 server.js 脚本(包含 API 端点)。
Socket.io 然后侦听 app.js (const io = socket(server)
) 并在服务器发出任何通知消息时通知 index.html。
如果我将 app.js 和 server.js 合并到一个脚本中,代码可以正常工作。
问题是,当我将脚本分成如下所示的微服务架构时,消息没有显示。
当我将端点代码拆分为如下所示的另一个脚本时,我无法弄清楚如何从 server.js 发出 socket.io 消息。
我尝试将socket.io-client
导入server.js,然后使用const socket=io()
,并使用socket.emit('notification','Task completed..!')
发出消息。但这不起作用。
你能帮我找出问题吗?
提前致谢!
app.js:
const app = require('./server');
const socket = require("socket.io");
const port = 6000;
const server = app.listen(port, () =>
console.log(`App started on port $port ...!`)
)
const io = socket(server);
module.exports=io;
server.js:
const express = require('express');
const io = require('socket.io-client');
const socket=io();
// Express configurations
const app = express()
app.get('/start', (req, res) =>
// Task completed notification
io.on("connection", (socket)=>
socket.emit('notification',`Task completed..!`);
);
);
// Export app
module.exports = app;
index.html:
<html lang="en">
<head>
<title>Notify</title>
</head>
<script src="/socket.io/socket.io.js"></script>
<script src="/assets/js/jquery.js"></script>
<script>
var socket = io();
socket.on('notification', (msg) =>
// Create notification element
var nb = ` $msg `;
$('#messages').html(nb);
);
</script>
<body>
<span id="messages"></span>
</body>
</html>
【问题讨论】:
【参考方案1】:修好了!
app.js:
const app = require('./server');
const socket = require("socket.io");
const port = 6000;
const server = app.listen(port, () =>
console.log(`App started on port $port ...!`)
)
const io = socket(server);
exports.io=io; // added
server.js:
const express = require('express');
const io = require('socket.io-client');
const socket=io();
// Express configurations
const app = express()
app.get('/start', (req, res) =>
// Task completed notification
require('./app').io.emit('processing',`Task Completed..!`); // updated
);
// Export app
module.exports = app;
index.html:
<html lang="en">
<head>
<title>Notify</title>
</head>
<script src="/socket.io/socket.io.js"></script>
<script src="/assets/js/jquery.js"></script>
<script>
var socket = io();
socket.on('notification', (msg) =>
// Create notification element
var nb = ` $msg `;
$('#messages').html(nb);
);
</script>
<body>
<span id="messages"></span>
</body>
</html>
【讨论】:
以上是关于Node.JS JavaScript socket.io 在微服务架构中发出消息的主要内容,如果未能解决你的问题,请参考以下文章
node.js + express + socket.io 无法将 javascript 文件加载到 index.html
在没有 node.js 的情况下独立使用 socket.io
我们可以在Node JS应用程序中使用socket.io和ejs(嵌入式javascript)而不是html页面吗?
我是否可以通过socket.io和JavaScript将Unity程序连接到node.js服务器,如果可以,怎么办?
我们可以在 Node JS 应用程序中使用带有 ejs(嵌入式 javascript)的 socket.io 而不是 html 页面吗?