Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 从外部文件调用socket.io API_Node.js_Sockets_Express_Socket.io - Fatal编程技术网

Node.js 从外部文件调用socket.io API

Node.js 从外部文件调用socket.io API,node.js,sockets,express,socket.io,Node.js,Sockets,Express,Socket.io,我正试图从另一个名为expressroutes的文件调用我的Socket.io接口。假设我想用它创建以下群聊,然后向群聊中涉及的用户发送通知 routes.js 下面是我的server.js文件 var http = require("http").Server(app); var io = require("socket.io")(http); ChatMicroservice = require("./microservice/chat/chat")(io); 如何访问socket接口并使

我正试图从另一个名为
express
routes的文件调用我的
Socket.io
接口。假设我想用它创建以下群聊,然后向群聊中涉及的用户发送通知

routes.js 下面是我的
server.js
文件

var http = require("http").Server(app);
var io = require("socket.io")(http);
ChatMicroservice = require("./microservice/chat/chat")(io);

如何访问socket接口并使用socket的
用户列表
发送通知?

要从外部文件调用socket.io API,您应该创建一个singleton类并将其导出,或者将socket对象保存为全局变量,并将连接的socket id保存在与用户对应的数据库中。因此,每当与服务器建立套接字连接时,套接字id即socket.id就会保存在与user-id对应的数据库中

因此,套接字接口变得

 global.io = io;
   io.sockets.on("connection", socket => {

    // add your method to save the socket id (socket.id) 
    // user-id passed can be accessed socket.handshake.query.userId


        socket.on("send-notification", notification => {
          console.log("How do I get here from the other file?");
        });
    })
在另一个文件调用中

global.io.to(id).emit(event, value);
如果您计划水平扩展应用程序,请在套接字界面中使用
socket.io redis

 const redis = require('socket.io-redis');
 global.io.adapter(redis({ host: redisUrl, port: redisPort }));

感谢您的水平缩放说明。我将不得不在Azure的多个实例上执行此操作。
global.io.to(id).emit(event, value);
 const redis = require('socket.io-redis');
 global.io.adapter(redis({ host: redisUrl, port: redisPort }));