Мне было интересно, можно ли разместить несколько приложений, используя один порт на одном IP-адресе. Я имею в виду аналогичный метод для виртуальных хостов Apache, где вы можете назначать домены / поддомены для определенных каталогов, хотя я бы хотел сделать это, где я могу разместить несколько приложений, используя один порт, но иметь поддомен, который определяет, какое приложение вы подключаете. к.
Пример того, как это будет работать в моей голове:
app_server.exe (Instance 1): 111.111.111.111:9999
app_server.exe (Instance 2): 111.111.111.111:9999
Тогда, если я подключусь к app1.example.com
он подключается к Instance 1
, в то время как app2.example.com
подключится к Instance 2
.
Я понятия не имею, возможно ли это на самом деле или нет, но я посмотрел и понятия не имел, как это будет называться, так что это мой лучший выбор.
Да, это можно сделать, если используемый протокол уровня приложения знает, какое имя было подключено. HTTP знает это из-за Host:
заголовок. TLS знает это (сейчас) из-за расширения «Server Name Indication». Я считаю, что FTP может это знать, основываясь на каком-то расширении протокола, но если вы все еще используете FTP, вы обречены.
Если протокол не иметь возможность указать, какое имя было использовано, тогда вы не сможете этого сделать, потому что все, что сервер знает, когда установлено соединение, - это исходный и целевой IP / порт. Все остальное нужно пройти на более высоком уровне.
Одно замечание относительно предлагаемой вами реализации: вам понадобится не замужем служба, прослушивающая порт, который принимает соединения, анализирует входящие данные в достаточной степени, чтобы определить, какое имя было запрошено, а затем (и только затем) может направить запрос в разные экземпляры приложения для обработки. Если эти экземпляры являются отдельными процессами, то некоторые средства передачи запроса на серверную часть, которая будет его обрабатывать (например, проксирование или, если вы имеете дело с действительно хороший дизайн протокола, передача сокетов), но если вы реализуете различные обработчики в одном процессе (например, с конфигурацией или динамически загружаемыми модулями), вы можете просто создать структуру данных с запросом в ней и передать ее всем, кто хочет Смирись с этим.