2013-02-12 110 views
2

我有一個Socket.io服務器和一個我一起編碼的基本HTTP服務器,但問題在於HTTP服務器試圖服務socket.io應該服務的請求。如何一起託管一個socket.io服務器和一個http服務器?

代碼:

//Dependences 
var sio = require('socket.io'); 
var http = require("http"); 
var NewRequestHandler = require('./NewRequestHandler').Handler; 
var DisconnectHandler = require('./DisconnectHandler').Handler; 
var AuthorisationRequestHandler = require('./AuthorisationRequestHandler').Handler; 
//The backlog of resources 
var ResourceBackLog; 

var ResourceRequestHandler = require("./ResourceRequestHandler").Handler; 
//Reports the IP adress and Port that it will run on. 
console.log('IP address: ' + process.env.IP); 
console.log('Port: ' + process.env.PORT); 
//Creates and configures a new http.server instance. 
var Server = new http.Server(); 

//Starts both the http and socket.io server. 
var io = sio.listen(Server.listen(process.env.PORT, process.env.IP, ResourceBackLog, function(error) { 
    if (error) { 
     console.log("Error: " + error); 
    } else if (!error) { 
     console.log("Server started sucsessfully."); 
     Server.on('request', ResourceRequestHandler); 
     console.log("Server now ready for requests."); 
    } 
})); 

//Handles the connect and authorisation bit 
io.sockets.on('connection', function(socket) { 
    console.log('New Connection'); 
    socket.on('auth', function(Keys) { 
    console.log('Autorisation Request Recived'); 
     AuthorisationRequestHandler(socket, Keys, function() { 
      socket.on('NewRequest', function(Request) { 
       NewRequestHandler(socket, Request); 
      }); 
      socket.on('diconnect', function() { 
       DisconnectHandler(socket); 
      }); 
     }); 

    }); 
}); 

的ResourceRequestHandler是通過檢查URL,然後在該位置, 打開該文件提供的資源文件,但它同時也是/socket.io請求。

+0

我發現在socket.io網站上的例子很容易理解 http://socket.io/#how-to-use 你應該嘗試和堅持的例子,直到你必須離開他們 – Floby 2013-02-12 14:39:47

回答

0

http.createServer(RequestHandler)new http.Server(RequestHandler)工作

0

我想讓Socket.io在另一個端口上偵聽,並讓普通的http服務器直接向它發送請求,這樣可以確保它們不會互相干擾。

// create server 
io = http.createServer(); 
io.on('uncaughtException', function(exception) { 
console.log(exception); 
}); 
io.listen(4001); 
0

基於Socket.IO 0.9.6。

在socket.io之前附加自定義請求偵聽器非常重要。然後,Socket.IO將處理它的請求,並將所有其他請求委託給您自己的請求偵聽器。

socket.io/lib/manger.js中的算法如下。 在構造函數中: 1.刪除所有現有的請求偵聽器。 2.附上Socket.IO請求偵聽器。 應要求: 1.嘗試處理請求。 2.如果Socket.IO無法處理它,它會將請求委託給原始偵聽器 - 那些先前在構造函數中刪除的偵聽器。

相關問題