如何一起托pipe一个socket.io服务器和一个http服务器?

我有一个Socket.io服务器和一个基本的HTTP服务器,我编码在一起,但问题是,HTTP服务器试图服务于socket.io应该服务的请求。

码:

 //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请求。

我会有Socket.io侦听另一个端口,并有正规的http服务器直接请求,这样可以确保他们不会互相干扰。

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

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

基于Socket.IO 0.9.6。

在socket.io之前附加自定义的请求监听器是很重要的。 然后Socket.IO将处理它所需的请求,并将所有其他请求委托给你自己的请求监听器。

socket.io/lib/manger.js中的algorithm如下。 在构造函数中:1.删除所有现有的请求侦听器。 2.附上Socket.IO请求侦听器。 根据要求:1.尝试处理请求。 2.如果Socket.IO无法处理它,它将请求委托给原来的侦听器 – 那些早先在构造器中被删除的侦听器。