Действительно ли сокеты надежны?

Вы, вероятно, знаете об этом, но на всякий случай: это намного легче только к типу shutdown -r (или безотносительно команды, которую Вы любите) в поле "Run", и совершите нападки, входят.

Сохранил разбрасывающие пакетные файлы, лежащие везде.

7
задан Brian Agnew 21 July 2009 в 08:24
поделиться

8 ответов

Сокеты - это API уровня приложения для выполнения сетевого взаимодействия. Надежность сокетов зависит от сетевого протокола, который вы выбираете при создании сокета. Если вы выберете TCP / IP, вы получите «надежную» передачу ... до предела. Если вы выберете UDP / IP, вы получите «ненадежную» передачу.

Как указано в других ответах, TCP гарантирует, что вы не потеряете или не повредите данные до определенного момента:

  1. , если имеется достаточно длинная сеть отключение, или отправитель или получатель умирает соединение TCP / IP разрывается и вы потеряете данные, если не предпринять шаги для перезапуска подключение.
  2. если есть сеть уровень повреждения данных, есть малая вероятность, что этого не будет обнаруживается контрольными суммами.

Для более высокого уровня гарантий надежности, чем обеспечивает TCP / IP, вам необходимо реализовать более чувствительные механизмы контрольной суммы и гарантированной доставки поверх сетевого уровня вашего приложения на основе сокетов. Или используйте продукт для организации очередей сообщений, который выполняет тяжелую работу за вас.

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

14
ответ дан 6 December 2019 в 08:45
поделиться

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

2
ответ дан 6 December 2019 в 08:45
поделиться

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

2
ответ дан 6 December 2019 в 08:45
поделиться

Socket надежны, поскольку все коммуникации выполняются поверх него, включая MQ.

Но вы можете добавить некоторую гарантированную доставку с MQ, чтобы повысить надежность вашего приложения. Что это такое? Гарантированная доставка гарантирует, что ваше сообщение будет обработано потребителем хотя бы один раз, но не более одного раза. потребитель выключен? производитель выключен? сервер MQ выключен? диск вылетает? благодаря MQ ни одно сообщение не будет потеряно, что бы ни случилось (при условии, что ваш администратор знает свое дело). Кроме того, если вы перезапустите потребителя, ни одно сообщение не будет обработано дважды. Что может быть важно, если сообщения содержат переводы на миллион долларов. Но это не гарантирует, что ваше сообщение будет обработано в разумные сроки. а время обработки иногда более важно, чем гарантированная доставка, в зависимости от вашего приложения.

Выбор наилучшего способа связи между вашими серверами зависит от вас. Гарантированная доставка имеет как финансовые, так и производственные затраты, поэтому ее следует использовать только в случае необходимости (например, перевод миллионов долларов).

Для большинства приложений вы можете добиться чего-то удовлетворительного, только повторив попытку отправки сообщения, когда он потерпит неудачу. Но это не настоящая гарантированная разовая доставка. не пытайтесь реализовать это самостоятельно, это очень сложная задача, которую могут достичь лишь немногие. Полезно подумать о повторной разработке такого сложного программного обеспечения, как MQ или Apache AQ.

Надеюсь, что это поможет.

  • jeb
2
ответ дан 6 December 2019 в 08:45
поделиться

Сокеты - это необработанный механизм для передачи данных. Все остальное реализовано поверх этого. В сетевой модели OSI они относятся к уровню 4. Хотя они реализуют надежное сквозное соединение, они редко используются в качестве конечного протокола. Практически всегда необходимо реализовать прикладной уровень. Что это будет, зависит от вашего приложения (нужно ли вам передавать файлы или просто отправлять сообщения) и вашей сетевой инфраструктуры.

1
ответ дан 6 December 2019 в 08:45
поделиться

Если вы используете сокет потока , протокол TCP гарантирует, что данные не будут потеряны при передаче и вряд ли будут повреждены (хотя вам нужно решить, будет ли его 16-битный контрольных сумм достаточно или вам нужен механизм контрольных сумм на уровне приложения).

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

0
ответ дан 6 December 2019 в 08:45
поделиться

В зависимости от типа данных простая веб-служба может быть самым быстрым решением. Их относительно легко настроить и протестировать. Хотя для некоторых конкретных примеров мне нужно знать, какие данные и среду вы используете.

0
ответ дан 6 December 2019 в 08:45
поделиться

Это в значительной степени зависит от типа разрабатываемого вами приложения. Если вы пишете программу, в которой вам нужен ответ или подтверждение отправленного сообщения, тогда TCP-сокеты хороши. Но если вы реализуете какой-либо сценарий рабочего процесса, вам следует использовать очереди сообщений.

0
ответ дан 6 December 2019 в 08:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: