3
我使用Node.JS与Socket.IO和Express。我的目标是创建一个模块来创建自定义的Socket.IO + Express服务器,并加载我的应用程序所需的所有功能。例如,跟踪在任何给定时间连接的客户端数量。在Node.JS的类中使用Socket.IO回调的正确方法是什么?
问题是,如果可能的话,我希望服务器可以像班级一样工作。我已经看到其他Node.JS模块使用类很好(包括Socket.IO本身),所以我认为它不应该与Node的面向模块的体系结构冲突。我需要它来处理类的原因是我希望能够轻松创建多个服务器实例。
这里是我所(简化为简洁起见):
index.js
var myserver = require("./myserver");
var myserver1 = myserver.createServer();
var myserver2 = myserver.createServer();
myserver1.port = 8080;
myserver2.port = 8081;
myserver1.start();
myserver2.start();
myserver.js
var io = require("socket.io");
var express = require("express");
var path = require("path");
function MyServer()
{
this.port = 8080;
this.expressServer = null;
this.ioServer = null;
this.clientCount = 0;
}
Server.prototype.getClientCount = function()
{
return this.clientCount;
}
Server.prototype.start = function()
{
this.expressServer = express.createServer();
this.ioServer = io.listen(this.expressServer);
this.expressServer.listen(this.port);
this.ioServer.sockets.on(
"connection",
function()
{
this.clientCount++;
console.log(this.clientCount + " clients connected.");
}
);
}
exports.createServer = function() { return new MyServer(); };
的"connection"
回调中的代码是不正确,因为Socket.IO中的this
关键字回调是指客户端触发了"connection"
事件的对象,而不是MyServer
对象。那么有没有办法从回调中访问clientCount
属性?
它的工作原理!我以前曾尝试为此创建一个'self'变量,但我只是在构造函数中创建了它。我没有意识到它也必须在'start'方法中创建。 – jSepia 2012-07-06 17:52:17