Какой самый простой и эффективный способ объединить UDP и RPC в Java? - PullRequest
4 голосов
/ 27 августа 2011

В настоящее время я рассматриваю возможность использования Java в одном из моих проектов (по причинам, не связанным с сетью). На данный момент я использую C ++ и собственный протокол, построенный поверх UDP. Моя проблема здесь в том, что, хотя дополнительная эффективность хороша для отправки больших объемов данных в реальном времени, я бы предпочел иметь что-то вроде RPC для чисто «логических действий», таких как вход в систему. RPC в C ++ сложно сделать, так как сам стандарт C ++ не имеет понятия о сериализации.

В другом ответе я обнаружил RMI в Java, который, похоже, похож на RPC, но я не смог найти, насколько он эффективен / отзывчив, ни может ли он быть подключен к моему существующему сокету UDP, поскольку хочу, чтобы на моей серверной программе было открыто два порта.

В качестве альтернативы, поскольку я думаю, что в Java есть сериализация, я мог бы сам реализовать RPC, в зависимости от того, насколько проста десериализация произвольного потока объектов в Java. Тем не менее, если бы это потребовало от меня потратить дни на изучение основ Java, для меня это не вариант.

Ответы [ 3 ]

2 голосов
/ 27 августа 2011

Если вы заинтересованы в RPC, всегда есть XML-RPC и JSON-RPC , оба из которых имеют реализации C ++ с открытым исходным кодом.К сожалению, большая часть моей разработки была на Java, поэтому я не могу говорить о том, насколько они полезны или эффективны, но это может быть чем-то, на что стоит обратить внимание, поскольку кажется, что вы уже проделали некоторую работу в C ++ и вам это удобно,У них также есть реализации Java, так что вы можете даже поддерживать приложения Java и C ++ с XML-RPC или JSON-RPC, если хотите пойти по этому пути.

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

1 голос
/ 27 августа 2011

Использование RPC в качестве абстракции не исключает использования UDP в качестве транспортного уровня: RMI - это абстракция RPC, которая обычно использует TCP под капотом (последний раз, когда я смотрел).

Я быПредложите просто кодировать Java-уровень, чтобы использовать свой протокол UDP: для этого вы можете использовать любую из множества библиотек, и вам не нужно отказываться от всей существующей работы.Если вы хотите обернуть слой RPC вокруг протокола, то нет причин, по которым вы не можете этого сделать: создайте метод login, который отправляет пакет UDP для входа в систему, получает соответствующий ответ и возвращает его.

0 голосов
/ 27 августа 2011

Если это удаленно серьезный проект, вам, вероятно, стоит взглянуть на Netty .

Это отличная библиотека для разработки сетевых систем, имеет много проверенных производственных приложений и хорошоподходит для таких вещей, как TCP или UDP клиент-серверная связь.Я бы не стал изобретать это колесо, если бы вам не пришлось: -)

В качестве бонуса у них есть несколько хороших примеров и документации.

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