2015-05-29 9 views
0

Я пытался понять разницу в модели Websocket и Comet. По моему пониманию,Открытая разность подключений в кометах и ​​веб-узлах

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

С другой стороны, веб-интерфейсы начинаются с установления связи, и как только клиент и сервер соглашаются обмениваться данными, соединение остается открытым.

Таким образом, в обоих случаях соединение остается открытым в течение длительного времени (особенно в сети). Так что это не недостаток websocket, чтобы поддерживать соединение открытым. Я хотел бы воспользоваться ссылкой SignalR в asp.net, чтобы обсудить эту концепцию.

ответ

1

Прежде всего, давайте поясним, что Comet поставляется в двух вариантах: потоковое HTTP и HTTP Long Polling. Вы имели в виду Лонг-Поллинг. (См. this other answer для терминологии).

Во всех трех случаях (WebSocket, HTTP Streaming и HTTP Long Polling) основной TCP-сокет остается открытым. Это на самом деле главная особенность такого рода методов, а не побочный эффект. Вы хотите, чтобы сокет оставался навсегда открытым (теперь я упрощаю), чтобы данные можно было асинхронно и с малой задержкой.

Как вы правильно сказали, это означает, что сервер должен иметь возможность обрабатывать большое количество открытых сокетов без потери ресурсов. И это один из ключевых элементов в выборе хорошего сервера Comet/WebSocket.

+0

Что я понял по этой ссылке: http://stackoverflow.com/questions/9107384/server-scalability-html-5-websockets-vs-comet, это то, что когда у вас есть сообщения в очереди для отправки клиенту , от сервера, в этом случае комета будет опросить, придется ждать, пока вы не отправите запрос на него (поскольку он не является полнодуплексным - верьте мне, если я ошибаюсь). Но, будучи полнодуплексным, websocket будет продолжать отправлять сообщения в очередь, даже если он выполняет текущий запрос ur. Пожалуйста, поправьте меня, если я ошибаюсь. –

+0

При длительном опросе Если базовое соединение TCP остается открытым, оно закрывается, когда следующий запрос отправляется для длительного опроса ??? –

+0

Полнодуплексный режим не означает конвейерную обработку. Полнодуплексный способ позволяет отправлять сообщения двунаправленно (от сервера к клиенту и от клиента к серверу) одновременно в одном и том же сокете. Конвейеризация означает возможность передавать сообщения, не дожидаясь получения какого-либо запроса на уровне приложения или нового запроса от клиента, чтобы получить следующее сообщение. WebSocket является полнодуплексным с конвейерной обработкой. Потоковая передача HTTP не является полнодуплексной, но имеет конвейерную обработку. HTTP Long Polling не является полнодуплексным и не имеет конвейерной обработки. В Long Polling основной TCP-сокет обычно остается открытым по запросам. –