Написание темы паб / подсистема - PullRequest
0 голосов
/ 24 июня 2009

Я пишу клиент-серверное приложение, которое будет публиковать и подписываться на темы. У меня есть несколько вопросов об архитектуре и реализации этого проекта.

Сначала для настройки базы я буду использовать c # (.NET 3.5) и хочу явно использовать необработанные сокеты / AIO / Threads (сначала нет WCF, так как я хочу точно настроить сервер и клиентов под мои нужды). Клиенты в основном подписываются на темы, но могут время от времени отправлять команды на сервер и даже публиковать данные. Некоторые клиенты могут быть только издателями.

  1. Как вы думаете, что должно быть основные строительные блоки моего сервера ( потоков на клиента, iocp, ....).

  2. Если клиент использует то же самое NetworkStream для прослушивания подписан темы и отправить команду / опубликовать на сервер? Как ждать данных и в то же время записывать данные в поток, если это будет сделано в та же тема?

(пример кода будет оценен :))

Ответы [ 2 ]

0 голосов
/ 24 июня 2009

Вы проверили ActiveMQ? Я полагаю, что это уже делает темы, и у C # есть возможность общаться с ним через их NMS API.

0 голосов
/ 24 июня 2009
  1. Я бы использовал асинхронные сокеты как можно больше, так как это избавило бы вас от необходимости управлять вашим собственным пулом потоков для обработки запросов.

  2. Клиент должен использовать два потока - один для распечатки, а другой для отправки. Это значительно упростит работу как на стороне клиента, так и на стороне сервера. Опять же, используйте асинхронные сокеты, чтобы избежать необходимости управления несколькими потоками.

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

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