2009-04-21 5 views
0

Есть ли в .NET проект или инфраструктура с открытым исходным кодом, которая обеспечивает базовую «сантехнику» для обмена сообщениями между клиентом и сервером через TCP? Кажется, это одна из тех вещей, в которой я в конечном итоге пишу по существу одно и то же снова и снова, и я хотел бы отвлечься от этого немного больше и разобраться с частями своего приложения, вместо того, чтобы писать еще один полупрозрачный механизм обмена сообщениями через TCP..NET-проект для обмена сообщениями TCP

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

+0

hmm звучит как ниша ... – Mark

+0

В той мере, в какой WCF пытается «решить любую проблему», уверены ли вы, что она также не решает вашу проблему? Вы рассматривали использование привязок net.tcp и двоичной сериализации? –

+1

WCF действительно зверь. Сказав это, есть много вводных учебников, многие из которых сосредоточены на простых задачах, таких как тот, который вы пытаетесь, - это действительно не так сложно в WCF, если вы не хотите делать какую-то причудливую конфигурацию или связь между сервером и клиентом имеет определенные особенности. – Noldorin

ответ

3

Во-первых, у вас будут проблемы с разной активацией, потоковыми моделями, буферами, кадрированием, безопасностью и сериализацией, по крайней мере, в интеграции или в ручном режиме. Это типично для любых UDP/TCP или конфигурационных/атрибутов, работающих на любом языке или в среде. И по-прежнему потребуется настройка в соответствии с потребностями сервера или клиента, простая природа огромных возможностей в работе ввода-вывода.

Полностью согласен, что WCF слишком раздута и намного медленнее по сравнению с .NET Remoting (что медленнее, чем управляемый код сокета, который намного медленнее, чем собственный код iocp) для ручного свернутого кода .. Но это дополнительная работа и если вы справились с вышеуказанным в общей библиотеке обобщений (не более мощные шаблоны, которые усложняют работу в .NET, т. е. вам нужно создавать типы нечетными способами +, обязательно использовать интерфейс), чем вы сделали хорошо, man-year с некоторой сложной сантехникой a la message-queueing (это не невозможно, но imho и ретроспектива никогда не стоит делать «в общем» ..).

Альтернативы - это MSMQ, что-то MS все чаще ставит на карту больше своего программного обеспечения или полуподобные биты с открытым исходным кодом, которые никогда не удовлетворяют полностью требуемой модели. Tibcos, ActiveMQs, вы это называете. Даже если идти на более низкий уровень, лучше всего считать C++ boost :: asio, и, хотя он считается верхушкой, как и все, что там не подходит, все это не подходит. И это довольно замечательный дизайн, поэтому я буду следить за потенциальными тратами времени.

В .NET Я бы сначала принял любую 50-портовую службу MS, которая нажимает «сегодня», и если не делать «еще один похожий код» и искать аналогичные концепции для оснащения вашего инструментария по линии, когда он снова появляется (как каждый новый I/O lib или framework делает каждые 5 лет или около того).

3

WCF имеет множество встроенных гаек и болтов. Хотя я и не пытался сам его реализовать.

2

Если вам нужна более простая поддержка обмена сообщениями, посмотрите на .Net's remoting support.

0

Вы также можете попробовать проект Indy.net.

Первоначально он был написан в Delphi, но это то, что он должен делать.

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