2012-04-08 2 views
0

Я хочу разработать протокол между несколькими компонентами, которые у меня есть. каждый может работать в отдельном процессе на другом хосте. Всегда есть инициатор (клиент) и тот, кто отвечает (сервер). клиент может находиться на нескольких языках java/C#/C++/cli. Сервер в моем случае всегда находится в java.
Так я думал о следующих свойствах:ищет api/протокол по http

  • Он должен на обычный текст, так что будет легко отлаживать.
  • Он должен позволить легко обновиться с одной стороны (это означает, что сериализация классов и строгие подписи методов).
  • Если это каркас, он должен быть тонким (WSDL слишком много выглядит для моих нужд).

Я думал, используя http через tcp.
Меня интересует в основном синтаксис, и если в java есть фреймворки, которые уже предоставляют такие возможности. Я смутно помню, что в Spring есть что-то подобное.

EDIT: Я предпочитаю тонкий каркас, а также я боюсь, что замена сигнатуры метода в RPC вызовет проблемы с конкурентоспособностью.
Я нашел this example, и это может быть мои потребности, поскольку я уже использую jaxb.

+0

То, что вы пытаетесь достичь, - это «Удаленный вызов процедур» (RPC), а также «Удаленный вызов (метод)» (RI/RMI). Я предлагаю вам ознакомиться с ним и изучить некоторые рамки и выбрать тот, который вам больше всего подходит. – dtech

ответ

1

Я бы пошел с SOAP. Хотя это и не самое простое, существуют различные библиотеки почти на всех комбинациях языка/платформы, и это вполне возможно. XML-RPC также может быть предложено, но SOAP является его преемником, поэтому я бы рекомендовал не использовать XML-RPC.

1

Я бы пошел с WSDL. Это на самом деле означает установить удаленную связь между компонентами, написанными на разных языках. Я использовал его под большой нагрузкой с C#, PHP, C++, Python и Java в течение длительного времени, и это было здорово. В принципе, все, что вам нужно будет сделать, - это фактически создать реальный протокол, который WSDL не является самим собой - в этом случае в протоколе будет указано множество команд в верхней части WSDL, например. Команда Hello (какой-то пинг), команды входа и выхода (для сеанса), а затем все виды необходимых вам материалов.

+0

WebServices всегда в порядке. Например, вы можете начать с Apache CXF. –

0

Вы можете остановиться на уровне TCP и использовать некоторую интеллектуальную библиотеку, например zeromq, для обработки всей проводки. Сам протокол является просто набором сообщений и адаптируется к вашим требованиям (и как с WSDL, не предопределенным транспортной инфраструктурой).

Пример (я вызов WebService сторонников, чтобы соответствовать пример в своих ответах;)

Сервер (Python для краткости):

import zmq 
ctx = zmq.Context() 
socket = ctx.socket(zmq.REP) 
socket.bind('tcp://0.0.0.0:12345') 
while True: 
    message = socket.recv() 
    # 'status' and 'shutdown server' would be part of your protocol 
    if message == "status": 
     socket.send("I'm ok") 
    elif message == "shutdown server": 
     socket.send("Ok, bye bye") 
     break 
    # implement your other commands here ... 
socket.close() 

Клиент:

import zmq 
ctx = zmq.Context() 
socket = ctx.socket(zmq.REQ) 
socket.connect('tcp://localhost:12345') 
socket.send('shutdown server') 
reply = socket.recv() 
print(reply) 

Это Это. И да, zeromq поставляется с 30 + языковыми связями.

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