从项目中的任何地方获取socket.io命名空间

马库斯

在我的REST调用和一些数据库插入之后,我想通过socket.io向前端发出新的通知,如下所示:

socket.broadcast.emit('send notification', notification);

由于我正在执行的功能是通过REST触发的,而不是通过socket.io触发的,因此我没有变量'socket'。

我以为起初我可以像这样获得“ io”:

var io = require('socket.io') // or like: require('socket.io')(3000)

从这里我以为我可以得到这样的命名空间:

var nsp = io.of('/notification-list');
nsp.on('connection', function (socket) { ... }

但是io似乎是未定义的(或者如果我将其与端口3000一起使用,则会得到EADDRINUSE,因为显然socket.io已连接到 127.0.0.1:3000

这可能是一个非常愚蠢的问题,但是由于我自己无法解决:如何socket准备好在此功能中使用?任何帮助将非常感激!


编辑:

我尝试过friend00的解决方案,但仍然不知道如何执行此操作。

在我中,server.js我创建服务器并导入我的socketIO内容,如下所示:

var server =
http.createServer(app).listen(app.get('port'), function () {
});
require('./socketio_listener/socketIoListener')(server);

然后我的 socketIoListener.js

var sockio = require("socket.io");
var io;

function initIO(server) {
    if (!server) { throw new Error("ERR"); }
    if (!io) {
        io = sockio.listen(server);
    }
    return io;
 }

module.exports.getIO = function () {
    if (!io) {  throw new Error("ERR"); }
    return io;
};

module.exports = function (server) {
io = initIO(server);

var nspNotification = io.of('/notification-list');
nspNotification.on('connection', function (socket) {
    socket.on('get notificationList', function (data) {
        notification.findNotifications(socket, data);
    });
    // ...
});

现在我尝试了我想通过socket.io发出一些东西的函数:

var io = require("socket.io").getIO();

我也尝试过:

var ioServer = require('../socketio_listener/socketIoListener');
ioServer.getIO();

但是我仍然总是得到:

TypeError: undefined is not a function

解决方案

我找到了解决方案,尽管我以前不太确定为什么会出现问题:我移至module.exports.getIO = function ()最底层,现在可以正常使用了。尽管我认为放在表socketIoListener.js中没关系,但看起来确实有关系。

jfriend00

您将必须io通过导出或模块方法调用的某种组合将单个服务器端变量共享给其他模块。

一旦初始化了socket.io侦听器,如下所示:

var io = require('socket.io').listen(server);

您将需要io与要使用的其他模块共享特定实例socket.io共享的确切程度取决于代码的结构以及共享位置。


例如,您可能有一个仅管理io初始化的模块:

var sockio = require("socket.io");
var io;

// mysocketio.js
// constructor function - should only be called once and passed the http server
module.exports = function(server) {
    if (!server) {
        throw new Error("Must pass http server instance to mysocketio module constructor");
    }
    if (!io) {
        io = sockio.listen(server);
    }
    return io;
};

module.exports.getIO = function() {
    if (!io) {
        throw new Error("Must call constructor of mysocketio module before getIO()");
    }
    return io;
};

然后,在一个地方使用特定的http服务器对其进行初始化,可以这样做:

var io = require("mysocketio")(server);

在您只想使用“已初始化” io的其他模块中,可以执行以下操作:

var io = require("mysocketio").getIO();

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从任何地方的套接字(Socket.io)访问发出的数据

来自分类Dev

Socket.io:命名空间和WS协议

来自分类Dev

如何删除io.socket命名空间事件?

来自分类Dev

如何删除io.socket命名空间事件?

来自分类Dev

io.of('namespace')。emit('event',message)无法在socket.io中使用命名空间

来自分类Dev

Flutter / Dart-URL异常不在项目中的任何地方吗?

来自分类Dev

使用命名空间时Socket.io客户端忽略端口[错误?]

来自分类Dev

在MEAN.js 4.2中使用Socket.io命名空间

来自分类Dev

我可以在socket.io的命名空间中使用房间吗

来自分类Dev

如何在类中定义SQL Server连接字符串并在项目中的任何地方使用?

来自分类Dev

如何在整个项目中传递一个值并在程序中的任何地方使用它

来自分类Dev

Socket.io:发送到命名空间中的所有客户端(发件人除外)

来自分类Dev

如何添加Project以在任何地方使用而无需更改另一个项目中的任何内容

来自分类Dev

从任何地方滚动Div

来自分类Dev

任何地方的“ if”开关列表?

来自分类Dev

单击框内任何地方,关闭

来自分类Dev

拖放图像到任何地方

来自分类Dev

单击任何地方回家?

来自分类Dev

任何地方的“ if”开关列表?

来自分类Dev

从任何地方滚动Div

来自分类Dev

从任何地方运行Python脚本

来自分类Dev

从任何地方进行谷歌查询

来自分类Dev

Libgdx点击(触摸)任何地方

来自分类Dev

Context API 从任何地方消费

来自分类Dev

关闭任何地方 sldenav 覆盖

来自分类Dev

如何在不调用.Net项目中任何地方的函数的情况下将所有异常保存在数据库中?

来自分类Dev

如何在不调用.Net项目中任何地方的函数的情况下将所有异常保存在数据库中?

来自分类Dev

如何在项目中重用xaml命名空间定义

来自分类Dev

项目中的类与gem之间的命名空间问题

Related 相关文章

  1. 1

    从任何地方的套接字(Socket.io)访问发出的数据

  2. 2

    Socket.io:命名空间和WS协议

  3. 3

    如何删除io.socket命名空间事件?

  4. 4

    如何删除io.socket命名空间事件?

  5. 5

    io.of('namespace')。emit('event',message)无法在socket.io中使用命名空间

  6. 6

    Flutter / Dart-URL异常不在项目中的任何地方吗?

  7. 7

    使用命名空间时Socket.io客户端忽略端口[错误?]

  8. 8

    在MEAN.js 4.2中使用Socket.io命名空间

  9. 9

    我可以在socket.io的命名空间中使用房间吗

  10. 10

    如何在类中定义SQL Server连接字符串并在项目中的任何地方使用?

  11. 11

    如何在整个项目中传递一个值并在程序中的任何地方使用它

  12. 12

    Socket.io:发送到命名空间中的所有客户端(发件人除外)

  13. 13

    如何添加Project以在任何地方使用而无需更改另一个项目中的任何内容

  14. 14

    从任何地方滚动Div

  15. 15

    任何地方的“ if”开关列表?

  16. 16

    单击框内任何地方,关闭

  17. 17

    拖放图像到任何地方

  18. 18

    单击任何地方回家?

  19. 19

    任何地方的“ if”开关列表?

  20. 20

    从任何地方滚动Div

  21. 21

    从任何地方运行Python脚本

  22. 22

    从任何地方进行谷歌查询

  23. 23

    Libgdx点击(触摸)任何地方

  24. 24

    Context API 从任何地方消费

  25. 25

    关闭任何地方 sldenav 覆盖

  26. 26

    如何在不调用.Net项目中任何地方的函数的情况下将所有异常保存在数据库中?

  27. 27

    如何在不调用.Net项目中任何地方的函数的情况下将所有异常保存在数据库中?

  28. 28

    如何在项目中重用xaml命名空间定义

  29. 29

    项目中的类与gem之间的命名空间问题

热门标签

归档