javascript - 如何同时托管 socket.io 服务器和 http 服务器?

标签 javascript node.js socket.io

我有一个 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);

关于javascript - 如何同时托管 socket.io 服务器和 http 服务器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14830059/

相关文章:

node.js - 指定永远不应在 Swagger 或 OpenAPI 中发送的属性

node.js - 如果对象字段在 MongoDB/Mongoose 中是唯一的,则将对象添加到数组中

node.js - Socket.io 和 Express 出现错误 "has no method socket"

websocket - Faye 与 Socket.IO(和 Juggernaut)

node.js - socket.io 客户端重新连接超时

javascript - Dynamic ACE 编辑器模式

javascript - enzyme 不适用于 karma + webpack

javascript - jQuery 使用下一个/上一个按钮滚动到下一个 Div 类

javascript - 如何通过 HOC 添加 onMouseDown 监听器

javascript - 如何使用webpack将http请求转发到https?