Предположим, что мы можем различать пакеты разных TCP-соединений друг от друга, если да, то можем ли мы принять несколько TCP-соединений только на одном сокете на стороне сервера? Я знаю, что сервер связывается с сокетом, и когда прием нового соединения назначает новый сокет новому соединению. Могу ли я переопределить ACCEPT systemcall?Обработка нескольких TCP-подключений только на одном сокете на сервере
ответ
Пожалуйста, предположим, что мы можем различать пакеты разных соединений TCP друг от друга
Вы не можете предположить, что это. Для приложения по TCP-соединению нет видимых «пакетов». TCP-соединение обеспечивает поток байтов. Вы не можете гарантировать, что следующее, что вы прочтете, будет означать, что заголовок сообщения сообщает вам, с какого клиента оно отправлено.
Границы пакетов не видны, но addr, порт информация. Нет никакой причины, по которой сокет TCP не мог бы работать так же, как UDP-сокет, предоставляя «следующие n байтов из addr, port», где n является произвольным (в отличие от UDP). – user1055568
@ user1055568 ''addr.port' information' не отображается в приложении через TCP-соединение, кроме как через' getpeername() ', что относится к сокету и, следовательно, к всему соединению. Я понятия не имею, о чем вы говорите. – EJP
Я просто сказал, что именно так спроектирован API сокетов Berkley, не имеет никакого отношения к тому, определяет ли протокол TCP границы пакетов уровня приложения. – user1055568
- 1. Обработка нескольких форм на одном JSP
- 2. Обработка соединений от нескольких пользователей на сервере
- 3. Дифференциация нескольких доменов, размещенных на одном сервере
- 4. Обработка нескольких действий формы на одном представлении?
- 5. Настройка нескольких приложений Django на одном сервере
- 6. Настройка нескольких сайтов на одном выделенном сервере
- 7. Cassandra - запуск нескольких кластеров на одном сервере
- 8. Хостинг нескольких приложений метеоритов на одном сервере
- 9. Хостинг нескольких веб-сайтов на одном сервере
- 10. Запуск нескольких экземпляров solr на одном сервере
- 11. Развертывание нескольких сервлетов на одном сервере Tomcat
- 12. ошибка приложения на сервере/клиентском сокете
- 13. StackExchange.Redis таймаут только на одном сервере
- 14. Выполнять пакет только на одном сервере
- 15. Связки Арент распаковки только на одном сервере
- 16. Код Unix работает только на одном сервере
- 17. Обработка нескольких серверов/другой схемы на одном сервере в одном приложении
- 18. Параллельное программирование на нескольких процессорах на одном сервере
- 19. Несколько выходов на сокете
- 20. обработка cloneNode на сервере
- 21. Jmeter тестирование на нескольких веб-сайтов на одном сервере
- 22. Отправить ПРИЕМ на сокете из нескольких нитей
- 23. Как ограничить акку только запуском на одном сервере?
- 24. Обработка нескольких сообщений на одном маршруте с помощью бутылки
- 25. Tomcat - масштабирование на одном сервере
- 26. Выполнение нескольких веб-сайтов на одном сервере с несколькими IPv4
- 27. Развертывание нескольких приложений WAR на одном сервере JavaEE
- 28. Потоковые объекты на сокете
- 29. «Правильный путь» для размещения нескольких доменов NodeJS на одном сервере?
- 30. Отдельный экземпляр MemoryCache для нескольких пулов приложений на одном сервере
Вы хотите, чтобы * один * сокет на сервере получал все данные от всех подключений? Как это делается для UDP? Тогда нет, это невозможно в TCP, поскольку это подключенный протокол, каждое соединение является отдельным объектом. –
Почему? Все, что вы упомянули, уже сделано TCP, и это делается в виде отдельного сокета для каждого принятого соединения. Почему, по-вашему, вам нужно изобретать API? – EJP
@ EJP. Подумайте, что я хочу обрабатывать множество соединений с минимальной задержкой, поэтому лучше обрабатывать все соединения одним сокетом вместо создания сокета для каждого из соединений, но ACCEPT systemcall возвращает отдельный сокет для каждого принятого соединения. Из-за этого я думаю, что я должен переопределить системный вызов ACCEPT! – MSH