Более быстрая репликация состояния по протоколу TCP или лучше - PullRequest
0 голосов
/ 21 декабря 2011

У меня есть двухузловая система, в которой я пытаюсь реплицировать состояние в памяти между узлами ... Для простоты просто подумайте Master-Slave ( Active-Passive ). Узел A имеет относительно постоянный поток поступающих изменений, а затем пытается передать состояние в Узел B. В настоящее время это происходит по периодическому расписанию путем пакетирования состояния и отправки его с экземпляром TcpClient.

Текущий процесс TcpClient кажется неэффективным. Это способ, которым я могу установить связь между двумя системами и состоянием потока от одной к следующей, пока канал установлен.

По соображениям производительности я не могу использовать что-либо вроде WCF или Remoting ... Я относительно неопытен с сетевыми конструкциями более низкого уровня, но я совершенно готов попробовать что-то новое. В идеале, решение должно быть чем-то, что я могу достичь с помощью нативного C # 4 и не нуждаться в каких-либо новых продуктах.

Ответы [ 2 ]

2 голосов
/ 21 декабря 2011

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

Если изменения не слишком велики, лучше всего отправлять только дельта-изменения, а не полные копии данных. Способ, которым я делал это в прошлом, заключается в использовании Разное выполнение . Это может быть больше, чем вы хотите попробовать, но основная идея заключается в том, что вы пишете функцию для обхода данных. Думайте об этом как об одновременном сериализаторе / десериализаторе. Под этой структурой управления он автоматически обнаруживает все изменения с момента предыдущего обхода. Вы можете получить эти изменения и отправить их получателю на другом конце, который работает таким же образом, но складывает изменения.

Это может быть слишком много для того, что вы делаете, но независимо от этого, TCP - это путь. Кстати, старайтесь избегать new -ing. Это дорого.

2 голосов
/ 21 декабря 2011

TCP - это протокол потоковой передачи на низком уровне. Кажется, правильный выбор.

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

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

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