2013-11-21 3 views
0

Я хочу создать приложение, которое предоставляет простые данные клиентам (байты, строки), но главным образом непрерывным способом (подталкивает, передает данные нескольким клиентам, возможно, за NAT). Производительность является ключевым фактором здесь: мне нужно большое количество клиентов с большим количеством сообщений, отправляемых в секунду (таким образом, тип связи UDP предпочтительнее при отправке данных клиентам).Java-библиотека для приложений и масштабируемых серверных приложений

Я тестировал базовые сокеты Java (TCP и UDP с многопоточным доступом), но не эффективен для большого числа клиентов (есть ли другой хороший подход с TCP?). Я пробовал передачу UDP, но я застрял здесь, потому что я не нашел никакого способа (или примера) передачи данных клиентам, которые, возможно, за NAT (это было бы приемлемым выбором, если бы я мог найти решение).

Итак, я начал искать некоторые рамки, которые могли бы удовлетворить мои потребности. Я нашел рекомендацию для:

  1. java NIO, но швы, что очень низкий уровень, а также многая борьбы с хорошими примерами и эффективными способами использования API
  2. JMS - швов, как интересное решение, но я не знаю, что возможно и эффективно отправлять трансляцию push нескольким клиентам за NAT. На данный момент, если JMS может это сделать, меня интересует основная (низкоуровневая) логика, поэтому я могу сделать то же самое с простой передачей UDP.
  3. Java NioServer - я не нашел много повторений, и это швы устарели, поэтому Я не знаю, насколько это достоверно

Еще одна важная проблема (и именно по этой причине я пытался использовать сокеты, простые сообщения udp/tcp) заключается в том, что я хочу создавать клиентов для разных платформ, языки (например, C/C++). Итак, после быстрого просмотра этих выше (1,2,3), я считаю, что использование любого из них заставит меня строить клиентов только на Java. Итак, какие советы или другие справочные ссылки вы бы дали?

+0

Существует также [KryoNet] (https://github.com/EsotericSoftware/kryonet). –

ответ

1

Я лично предложил Netty, это оболочка над функциональностью NIO, которая делает вещи намного более управляемыми.

Это очень масштабируемое решение, и оно не требует, чтобы ваши клиенты находились на каком-либо конкретном языке.

Однако, если вы просто закодированы объекты с использованием сериализации Java, вам понадобится код в клиенте, который понимает, как Java упаковывает данные.

Вместо этого я бы предложил использовать межплатформенный протокол. У меня были многочисленные успехи с Google Protocol Buffers, который я использовал над Netty несколько раз. Это не только даст вам стандартный язык для разговора между приложениями, но также выполняет сжатие - что может быть очень полезно.

Google предоставляет библиотеки protobuf для большинства основных языков программирования, которые будут декодировать сообщения в типы данных локального языка. Например, вот C++ documentation.

Кроме того, вы можете найти some benchmarks протобуфа по сравнению с другими часто используемыми протоколами кодирования. Это может помочь принять ваше решение - обратите внимание, что protobuf не выходит на первое место! Я по-прежнему предпочитаю это благодаря удобству использования и простоте использования на разных языках.

+0

Простые строки (текст) достаточны для моих нужд на данный момент.Спасибо –

+0

@ ice13ill Похоже, вам не нужен протобуф, но я все же предлагаю взглянуть на нетто. – jwa

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