Возобновите то же самое соединение TCP - PullRequest
1 голос
/ 25 марта 2011

У меня есть многопроцессный TCPServer, который создает (с помощью fork () в linux) один процесс (дочерний) на запрос клиента, и в то же время он прослушивает запрос другого соединения.Таким образом, у меня есть соотношение 1 к 1 между клиентом и сервером.Предположим, что происходит сбой одного клиента ... возможно ли повторно подключить его к тому же дочернему серверному процессу? Другими словами ... возможно ли восстановить ранее существующее соединение, которое не удалось, или попытки восстановить соединение создают новое соединение (тогда новый дочерний серверный процесс)?спасибо ...

Ответы [ 2 ]

2 голосов
/ 25 марта 2011

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

Вы можете изменить способ работы вашего приложения.Oracle SQL * Net делает это на некоторых платформах (из-за ограничений платформы).

При первоначальном подключении к TCPServer возникает вилка and then opens up a new listening socket, отправляющая обратно команду перенаправления для подключения к новому прослушивающему сокету и идентификации деталей (чтобы не допустить, чтобы кто-либо еще подключался и выдавал себя за оригинальный разъем).Затем клиент подключается к новому сокету и использует этот сокет для любых повторных подключений при отключениях до их времени.

0 голосов
/ 25 марта 2011

Я сделал нечто очень похожее на это на платформе .NET.Если у вас есть что-то уникальное для каждого соединения (например, IMEI подключаемого устройства, это можно сделать). У вас должна быть глобальная переменная двумерного массива с комбинацией ProcessID и IMEI.Поэтому, когда устройство отключено, а затем устройство повторно подключается, вы только ищете в этом массиве этот IMEI, и у вас есть процесс для этого устройства.Вы должны быть очень осторожны с этой глобальной переменной.

Отредактировано: я привел пример некоторого уникального идентификатора.В моем случае это был IMEI устройств.В вашем случае это может быть что-то еще, что, как вы знаете, уникально.Я должен был сделать это, потому что у меня была очень большая проблема с устройствами, разрывающими соединение.Каждое новое устройство было новым соединением, так что впоследствии у меня была очень большая загрузка процессора.

...