Является ли соединение websocket надежным?



Я всегда думал, что web socket гарантирует доставку данных, так как он построен поверх TCP, который надежен. Я читал документацию Java web socket API по этой ссылке
https://docs.oracle.com/javaee/7/api/javax/websocket/RemoteEndpoint.html

Он говорит, что




Нет никакой гарантии успешной доставки сообщения веб-сокета к узлу, но если действие отправки сообщения вызывает ошибку, известную контейнеру, API выдает оно.




Разве TCP не должен гарантировать доставку сообщения?

704   2  

2 ответов:

Надежно != Гарантированный. Надежность означает, что вы будете уведомлены, если произошел сбой (или успех) - если конечные пользователи отключают свой кабель локальной сети, даже tcp не может гарантировать доставку.'

"гарантия" немного вводит в заблуждение. TCP сделает наилучшую попытку отправить упорядоченные данные, отправленные одним стеком TCP, чтобы быть принятыми в порядке другим стеком TCP. Если это невозможно сделать, стеки TCP будут вовлечены в ситуацию ошибки. Это ничем не отличается от гарантии возврата денег, которую вы получаете в магазине; режим отказа означает, что вы получаете замену и повторяете попытку... в конце концов, если слишком много неудач и получить свои деньги обратно (например, соединение сломано).

Тоже... TCP "гарантия" делает Не означает, что данные "гарантированно" будут правильно обработаны на прикладных уровнях обоих стеков. За это отвечают прикладные протоколы. После завершения работы TCP передает его на уровни приложений над ним, которые реализуют такие вещи, как pub/sub, http, rpc, пространства кортежей, электронная почта, ftp, транзакции, базы данных и т. д...

Comments

    Ничего не найдено.