2009-08-01 3 views
1

Это потенциально вопрос новичков, но если я открываю и записываю некоторые данные в сокет, то выйдите из подпрограммы, чтобы сокет вышел из области видимости, а затем попытался прочитать данные из другой программы, в более позднее время будут ли данные все еще присутствовать или они будут умирать, когда оригинальные декларации выходят за рамки?Сокеты и сохранение данных

Спасибо,

Н.

Дополнительная информация:

Я пытаюсь переписать 2 программы, которые используют файлы в качестве интерфейса для связи. Общий поток:

Главный процесс: запись данных.

Основной процесс: Спаун вторичный процесс (ы) на другие узлы в кластере

Основной процесс: Подождите, пока вторичный процесс не закончен.

вторичного процесса: Считывание данных (написанный основной)

вторичный процесс: Запись данных

вторичного процесса: выход

основного процесса: Считывание данных.

Так я в основном хочу, чтобы заменить запись/чтение/запись/чтение файлов с сокетами (которые должны быть намного быстрее!)

ответ

5

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

Для UDP, если никто не слушает сокет во время отправки данных, никто не получит его, если вам не удастся открыть программу прослушивания достаточно быстро, чтобы данные все еще перемещались внутри сетевых драйверов , Но не рассчитывайте на это, потому что «localhost loopback» внутри драйвера не должен занимать больше нескольких микросекунд для доставки данных.

P.S. Возможно, вы сможете получить более подходящий ответ, если более подробно описать свою точную ситуацию. Чего вы пытаетесь достичь?


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

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

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

3

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

Если вы хотите иметь асинхронную доставку, вам необходимо использовать систему передачи сообщений, которая позволяет отложить доставку. В этом случае получатель сообщения фактически является системным процессом, который сохраняет сообщение до тех пор, пока клиент не запросит его. Фактическое общение происходит между клиентом в одной системе и системным процессом с другой, при этом клиент на другой системе получает данные локально. Подробнее о передаче сообщений и его вариантах вы можете узнать по адресу http://en.wikipedia.org/wiki/Message_passing.

Смежные вопросы