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

使用Socket.io将json数据发送到Node.js

我们可以在Node JS应用程序中使用socket.io和ejs(嵌入式javascript)而不是html页面吗?

我是否可以通过socket.io和JavaScript将Unity程序连接到node.js服务器,如果可以,怎么办?

我们可以在 Node JS 应用程序中使用带有 ejs(嵌入式 javascript)的 socket.io 而不是 html 页面吗?