簡體   English   中英

如何將socket.io服務器和http服務器托管在一起?

[英]How to host a socket.io server and a http server together?

我有一個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中的算法如下。 在構造函數中:1.刪除所有現有的請求偵聽器。 2.附加Socket.IO請求偵聽器。 根據請求:1.嘗試處理請求。 2.如果Socket.IO無法處理它,它將請求委托給原始偵聽器-先前在構造函數中刪除的偵聽器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM