У меня есть три сервераЗапуск два серверов сокетов на одном порт
- Главный сервер - который слушает весь запрос HTTP
- Разъем Сервер 1: Прослушайте тип X запроса сокета
- Разъем Сервер 2: Слушайте Y-типы запросов на сокет
Я хочу запустить все три сервера, используя один и тот же IP-адрес: Комбинация портов и все три сервера имеют другое имя хоста. Я обновил локальный 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: порт combinati на?
Звучит как работа для прокси-сервера, такого как nginx, который может пересылать каждое входящее соединение, предназначенное для определенного имени хоста, на другой порт на одном сервере. Тогда у вас будет три слушателя, по одному для каждого, все прослушивающие разные порты. Кроме этого, вам, вероятно, придется моделировать ту же функциональность на вашем собственном сервере, имея одного слушателя на нужном порту, который затем распространяет запросы на нужные обработчики. – jfriend00
необходимо, чтобы у вас были два разных сервера websocket? из этого фрагмента кода кажется, что оба прослушивают один и тот же домен. Возможно, 'namespaces' в socket.io может решить вашу проблему. – Gntem
Что вы предлагаете, это объединить socketServer1 и socketServer2? –