Разница в открытом соединении в Comet и Websockets
Я пытался понять разницу в модели Websocket и Comet. Согласно моему пониманию,
В кометной модели соединение остается открытым до тех пор, пока серверу не удастся что-то передать клиенту. Как только сервер передает данные клиенту, соединение закрывается и устанавливается новое соединение для следующего запроса. Это не считается хорошим подходом, так как соединение может оставаться открытым в течение длительного времени (что приводит к интенсивному использованию ресурсов сервера) или может истечь время ожидания.
С другой стороны, веб-сокеты начинаются с установления соединения, и как только клиент и сервер соглашаются обмениваться данными, соединение остается открытым.
Таким образом, в обоих случаях соединение остается открытым в течение длительного времени (особенно веб-сокета). Так что это не недостаток websocket, чтобы держать соединение открытым. Я хотел бы взять ссылку SignalR в asp.net, чтобы обсудить эту концепцию.
1 ответ
Во-первых, давайте поясним, что Comet поставляется в двух вариантах: HTTP Streaming и HTTP Long Polling. Вы имели в виду длинный опрос. (Смотрите этот другой ответ для терминологии).
Во всех трех случаях (WebSocket, HTTP Streaming и HTTP Long Polling) базовый сокет TCP остается открытым. Это на самом деле главная особенность такого рода техники, а не побочный эффект. Вы хотите, чтобы сокет оставался постоянно открытым (я упрощенно сейчас), чтобы данные могли передаваться асинхронно и с низкой задержкой.
Как вы правильно сказали, это означает, что сервер должен иметь возможность обрабатывать большое количество открытых сокетов, не тратя ресурсы. И это один из ключевых элементов при выборе хорошего сервера Comet/WebSocket.