从nodejs控制器发出Socket.io,我这样做对吗?

时间:2018-11-01 14:16:59

标签: node.js socket.io

我是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作为属性传递给我,我无法理解,因此,如果有人可以向我解释如何传递它,我将非常感激。

谢谢

-维杰

1 个答案:

答案 0 :(得分:1)

通常不建议使用global对象,因为它可能引起命名冲突。例如,您require可能还设置了global._io的模块,将您的_io发送到垃圾收集器。

但是,如果您使用的模块数量较少,那么对于小型应用程序来说,这是一个完美可行的解决方案。

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

server.js

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

controller.js

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