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 }));