Socket.io从nodejs控制器发出,我做得对吗



我是nodejs的新手,现在需要将socket.io集成到应用程序中。

基本上,它是一个电子商务应用程序,我需要在管理屏幕上自动显示订单,所以我使用socket.io来发出最新订单的json。

经过更多的搜索,我终于集成了一个简单的解决方案,即全局声明io变量并在控制器中使用它。

一个或多个客户端将连接到具有特定ID的套接字,我将向该事件发出如下输出。

server.js

var http = require('http').Server(app)
var io = require('socket.io')(http)
global._io = io

controller.js

exports.socketServer = (req,res) => {
global._io.emit('groupid', "json_data")
})

因此,当从该模块插入新订单时,我将向与套接字连接的用户发送json。

这够公平吗!?使用上述代码的最佳实践和缺点是什么。

我看到很少有帖子说要通过io作为属性,我无法理解,所以如果有人能解释我如何通过它,我真的很感激。

感谢

-Vijay

通常不鼓励使用global对象,因为它可能会导致命名冲突。例如,require的模块也可以设置global._io,将_io发送到垃圾收集器。

然而,对于小型应用程序来说,如果你使用的模块数量相对较少,这是一个完全可行的解决方案。

建议在模块之间共享变量的方法是将其放入exports对象:

server.js

var http = require('http').Server(app)
var io = require('socket.io')(http)
exports.io = io;

控制器.js

exports.socketServer = (req,res) => {
require("server.js").io.emit('groupid', "json_data")
})

最新更新