Как работает асинхронный сервер сокетов?

Я должен заявить, что я не спрашиваю о конкретных деталях реализации (пока), а просто делаю общий обзор того, что происходит. Я понимаю основную концепцию сокета, и нуждаются в разъяснении процесса в целом. Мое (вероятно, очень неправильное) понимание в настоящее время следующее:

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

Мои вопросы:

Насколько я понимаю?

Требуется ли это для каждого клиентского сокета? собственный поток для прослушивания данных?

Как данные направляются в нужный клиентский сокет? Об этом позаботились внутренности TCP / UDP / ядра?

В этой многопоточной среде, какие данные обычно используются совместно и каковы спорные моменты?

Любые пояснения и дополнительные объяснения будут буду очень признателен.

РЕДАКТИРОВАТЬ:

Что касается вопроса о том, какие данные обычно используются совместно, и спорных моментов, я понимаю, что это скорее детали реализации, чем вопрос, касающийся общего процесса принятия соединений и отправки / получения данные. Я просмотрел пару реализаций (SuperSocket и Kayak) и заметил некоторую синхронизацию для таких вещей, как кеш сеанса и многоразовые пулы буферов. Не стесняйтесь игнорировать этот вопрос. Я признателен за все ваши отзывы.

12
задан tshepang 27 March 2014 в 02:27
поделиться