Реализация сокет-сервера или файлового сервера с использованием нескольких потоков: концепция не ясна - PullRequest
2 голосов
/ 03 июня 2011

Пожалуйста, помогите мне прояснить эту концепцию. Скажем, у нас есть сервер портов сокетов, реализованный с использованием потоков. Сервер сокетов прослушивает порт сокета и, когда приходит сообщение, создает поток для обслуживания запроса.

Код клиента отправляет определенное количество сообщений на сервер. Этот клиентский код также может быть запущен с разных компьютеров несколькими пользователями. Я понимаю, что коды клиентского кода выполняются как отдельные процессы. То есть отдельные процессы выдают запросы на сервер, который затем обрабатывается серверным потоком.

Таким образом, клиентский процесс обрабатывает стек, адресное пространство пользователя, блок управления процессом и т. Д., Передается потоку сервера, который обрабатывает его запрос.

Точно так же, если это файловый сервер и запрос на открытие файла реализуется потоком сервера, тогда fd является частью таблицы дескрипторов файлов сервера или вызывающих процессов.

Буду рад получить ссылку на материалы, которые я смогу прочитать. Спасибо

Ответы [ 2 ]

4 голосов
/ 03 июня 2011

Нет, клиент и сервер - это разные процессы, возможно, даже запущенные на разных машинах.

Клиенты будут просить операционную систему (через библиотеки) отправлять сетевые сообщения на серверы, операционная система которых распакует их, и направлять их (через библиотеки) в процесс сервера.

Теперь «потоки обработки клиента» - это другое, они являются подкомпонентами серверного процесса, и в вашей настройке один из этих потоков (тот, который обрабатывает клиента на другой стороне сети) будет получать данные и делать все, что нужно (возможно, включая ответ, если необходимо).

В ситуации с файловым сервером дескриптор файла, предоставляемый операционной системой, никогда не «покидает» файловый сервер. Клиенты файлового сервера создают все необходимое для зеркального отображения содержимого удаленного компьютера. Такое зеркалирование может включать файловые дескрипторы, но они определенно не совпадают с файловыми дескрипторами, которые находятся на сервере. Дескрипторы файлов клиента связаны с кодом, который принимает запрошенную операцию и превращает ее в сетевой вызов, в то время как дескрипторы файлов сервера (вероятно) обращаются к блокам на диске напрямую.

0 голосов
/ 03 июня 2011

'Сервер сокетов прослушивает порт сокета и, когда приходит сообщение, создает поток для обслуживания запроса.'Почти.В этом типе конструкции сервера новый поток клиент-сервер создается (или удаляется), когда соединение с клиентом принимается потоком прослушивания сервера.Этому потоку клиент-сервер передается экземпляр сокета клиент-сервер, который выделяется потоком прослушивателя accept ()Затем поток клиент-сервер обычно читает данные из сокета клиент-сервер, чтобы получить сообщения HTTP GET / POST и т. Д.

'Код клиента отправляет на сервер указанное число сообщений.Этот клиентский код также может быть запущен с разных компьютеров несколькими пользователями.Я понимаю, что коды клиентского кода выполняются как отдельные процессы. То есть отдельные процессы выдают запросы на сервер, который затем обрабатывается серверным потоком. 'Да-иш.Существует вероятность того, что один клиент на одном компьютере может иметь несколько подключений из нескольких потоков, но вы правы на 99,99%.

Итак, клиентский процесс обрабатывает стек, адресное пространство пользователя, блок управления процессами и т. Д.поток сервера, который обрабатывает его запрос. 'Нет!Это было бы абсолютным кошмаром!

Точно так же, если это файловый сервер и запрос на открытие файла реализован серверным потоком, тогда fd является частью таблицы файловых дескрипторов сервера или вызывающих процессов.

Файл / все, что открыто потоком клиент-сервер.Все ресурсы / дескрипторы, выделенные клиент-серверным потоком, принадлежат серверу.

Rgds, Martin

...