2

我有一个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 请求。

4

3 回答 3

0

我会让 Socket.io 在另一个端口上监听,并让常规的 http 服务器直接向它发出请求,这样你就可以确保它们不会相互干扰。

// create server
io = http.createServer();
 io.on('uncaughtException', function(exception) {
 console.log(exception);
});
io.listen(4001);
于 2013-02-14T04:41:03.090 回答
0

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

于 2013-02-17T13:43:48.310 回答
0

基于 Socket.IO 0.9.6。

在 socket.io 之前附加您的自定义请求侦听器很重要。然后 Socket.IO 将提供它可以处理的请求并将所有其他请求委托给您自己的请求侦听器。

socket.io/lib/manger.js 中的算法如下。在构造函数中: 1. 删除所有现有的请求侦听器。2.附加Socket.IO请求监听器。根据请求: 1. 尝试处理请求。2. 如果 Socket.IO 无法处理它,它会将请求委托给原始侦听器 - 那些之前在构造函数中删除的侦听器。

于 2013-04-29T16:05:15.060 回答