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