javascript - 从另一个文件访问 SocketIO
问题描述
我正在尝试向从单独文件连接的所有套接字发出。但是我似乎无法弄清楚。
套接字.js
var socketio = require('socket.io');
var users = require('./modules/users');
var io = socketio();
socket.io = io;
io.on('connection', function(socket){
//Stuff
console.log('Hello :)');
});
module.exports = socket;
用户.js
var socket = require('../socket');
function news(){
socket.io.sockets.emit('news', {
message: 'Woah! Thats new :)'
})
}
setInterval(function(){
news();
}, 5 * 1000);
但是,socket
在 users.js 中似乎是空的,我似乎无法访问 io 对象。我怎样才能做到这一点,以便我可以向所有用户发出?没有将 io.sockets 解析为新闻函数或将我的函数移动到套接字文件?
解决方案
您可以在 utils 和 io 函数中将 io 对象定义为 let 作为全局变量。您可以从任何文件中调用这些函数。例如:
// app.js
const { socketConnection } = require('./utils/socket-io');
const http = require('http');
const express = require('express');
const app = express();
const server = http.createServer(app);
socketConnection(server);
// utils/socket-io
let io;
exports.socketConnection = (server) => {
io = require('socket.io')(server);
io.on('connection', (socket) => {
console.info(`Client connected [id=${socket.id}]`);
socket.join(socket.request._query.id);
socket.on('disconnect', () => {
console.info(`Client disconnected [id=${socket.id}]`);
});
});
};
exports.sendMessage = (roomId, key, message) => io.to(roomId).emit(key, message);
exports.getRooms = () => io.sockets.adapter.rooms;
// any file
const { sendMessage } = require('../utils/socket-io');
const foo = async () => {
const roomId = '12345';
const key = 'new-order';
const message = 'new order assigned';
sendMessage(roomId, key, message);
};
推荐阅读
- rust - Rust std::net::UdpSocket 没有名为 recv_from 的方法
- python - 在 python 中使用 mplot3d 绘制透明平面
- java - 如何在不删除配置单元表的情况下基于 DataFrame 从 SparkSQL 更改表,例如删除/添加列?
- text - 如何将文本转换为 MOA 实例?
- c# - 如何使用查询过滤SSRS中的数据?
- c# - 将项目添加到工厂 startnew 中的字典时,代码会抛出 NullReferenceException
- ruby - 在迭代每个索引并保持组大小时跳过某些索引
- android - 执行命令react-native run-android时在非调试模式下“属性描述必须是对象错误”
- android - 无法读取 InputStream
- python - 如何使用电子表格中的第一行作为 Dataframe 列名而不是 0 1 2...等?