0

我需要在一些不同的文件中访问我的 socket.io 实例,你是如何让它工作的?

这是我尝试过的:

main.js

var app = express();
var sockets = require('./sockets');
sockets.listen(app)

sockets.js

var io = require('socket.io');
exports.listen = function(app) {
    io = io.listen(app);
    //...
}
exports.io = io;

SomeClass.js

var io = require('./sockets').io;

var SomeClass = function() {
    var Clients = io.sockets.clients('room');
    //io is undefined...
}

exports.SomeClass = SomeClass;
4

1 回答 1

0

在您的文件中,io.sockets未定义,因为您错误地启动了服务器。Socket.IO 需要一个 HTTP 服务器实例,而您传递的是一个 Express 实例。您还试图在导出变量后更改它,但这是行不通的。这是你应该做的:

var http = require('http');
var express = require('express');
var app = express();

var server = http.createServer(app);
var io = require('socket.io').listen(server):

server.listen(80);

如果您仍想将其拆分为文件,则必须将 Socket.IO 实例放在主应用程序中,并在需要时将其传递给其他模块。

于 2013-09-16T16:40:32.093 回答