我有三台服务器
我想使用相同的IP:Port组合来运行所有三台服务器,并且所有三台服务器都具有不同的主机名。我已经更新了本地DNS ,例如/etc/hosts
,将所有三个域名解析为相同的IP 127.0.0.1
。
我VHost
用来根据主机名解析请求并将请求定向到适当的服务器。这是该代码:
var express = require('express');
var vhost = require('vhost');
var app = express();
var https = require('https');
var mainServer = <hostname1> ;
var socketServer1 = <hostname2> ;
var socketServer2 = <hostname3>;
var server = https.createServer(<options>, app);
server.listen(<somePort>,function(){
console.log('VHost running');
});
var mainApp = require('./app.js');
var socketServerApp1 = require('./socketServer1');
var socketServerApp2 = require('./socketServer2');
app.use(vhost(mainServer, mainApp));
app.use(vhost(socketServer1, socketServerApp1(server)));
app.use(vhost(socketServer2, socketServerApp2(server)));
我在上面的代码中面临的问题是,如果我尝试同时运行两个套接字服务器,浏览器将抛出如下错误:
WebSocket connection to 'wss://socketServer1:8443/socket.io/?EIO=3&transport=websocket&sid=qlSXz3os5eDI8c_EAAAC' failed: Connection closed before receiving a handshake response
但是,如果一次只运行一个套接字服务器,那么对于该套接字服务器来说一切正常,即,如果我对app.use中的一个进行注释,例如:
app.use(vhost(mainServer, mainApp));
app.use(vhost(socketServer1, socketServerApp1(server)));
// app.use(vhost(socketServer1, socketServerApp2(server)));
不能在同一IP:Port组合上运行两个套接字服务器吗?
问题是两个套接字服务器都具有单独的列表器,这导致了错误。将套接字列表器移动到vhost App可以解决此问题。以下是代码:
var express = require('express');
var vhost = require('vhost');
var app = express();
var https = require('https');
var socketio = require('socket.io');
var mainServer = <hostname1> ;
var socketServer1 = <hostname2> ;
var socketServer2 = <hostname3>;
var server = https.createServer(<options>, app);
var io = socketio.listen(server);
server.listen(<somePort>,function(){
console.log('VHost running');
});
var mainApp = require('./app.js');
var socketServerApp1 = require('./socketServer1');
var socketServerApp2 = require('./socketServer2');
app.use(vhost(mainServer, mainApp));
app.use(vhost(socketServer1, socketServerApp1(io)));
app.use(vhost(socketServer2, socketServerApp2(io)));
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句