Что происходит, когда соединение падает в розетки (C) - PullRequest
3 голосов
/ 25 февраля 2011

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

Я пишу центральный многопоточный сервер C с пулом потоков. Есть два типа клиентов, типа A и типа B. Есть тысячи каждого. Тип A - это работники, которые делают что-то для типа B. Тип A постоянно обновляет информацию о себе на сервере (скажем, каждые 15 секунд). Тип B общается с сервером только тогда, когда ему нужно что-то сделать, после чего сервер выбирает клиента A и назначает ему задание. Это происходит примерно 24/7 и очень чувствительно ко времени.

Я решил использовать постоянную модель TCP - это означает, что как только B запрашивает выполнение работы, сервер может немедленно отправить информацию в A, не дожидаясь, пока соответствующий A подключится к сервер. Кроме того, если каждый А разговаривает с сервером каждые 15 секунд, установление соединений потребует много времени.

Если A, выбранный сервером, недоступен, ему нужно как можно скорее выбрать новый A, так как B очень нетерпелив.

Мой вопрос: как мне узнать, разорвалось ли соединение? Я не говорю о закрытой розетке, но просто больше не подключен. Например, B1 хочет выполнить работу, сервер выбирает A1 и отправляет ему запрос. Однако кто-то решает перерезать кабель Ethernet. Я не могу позволить, чтобы сервер успешно отправлял данные на А1 до истечения времени ожидания соединения. Могу ли я пинговать клиента перед тем, как отправлять ему сообщения или что-то еще? Будет ли это слишком большой задержкой? Что можно сделать?

1 Ответ

4 голосов
/ 25 февраля 2011

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

Именно так отрасль финансовых услуг обрабатывает потоки рыночных данных.Если вы не получили ответ достаточно быстро, вы больше не можете доверять отправителю и должны игнорировать его, пока ситуация не улучшится.Для некоторых приложений они даже отправляют две идентичные копии каждого пакета по двум отдельным сетевым путям (используют туннели, MPLS-TE, два дерева многоадресной рассылки), так что у них всегда есть резервный пакет, если он им нужен.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...