Самый быстрый и надежный способ взаимодействия приложений Clojure (Java) и Ruby

У нас есть размещенные в облаке (RackSpace cloud) приложения Ruby и Java, которые будут взаимодействовать следующим образом:

  1. Приложение Ruby отправляет запрос в приложение Java. Запрос состоит из структуры карты, содержащей строки, целые числа, другие карты и списки (аналог JSON).
  2. Приложение Java анализирует данные и отправляет ответ в приложение Ruby.

Мы заинтересованы в оценке обоих форматов обмена сообщениями (JSON, Протоколы буферов , Экономия и т. Д.), А также каналы / методы передачи сообщений (сокеты, очереди сообщений, RPC, REST, SOAP и т. Д.)

Наши критерии:

  1. Короткое время приема-передачи.
  2. Низкое стандартное отклонение времени приема-передачи. (Мы понимаем, что паузы при сборке мусора и пики использования сети могут повлиять на это значение.)
  3. Высокая доступность.
  4. Масштабируемость (мы можем захотеть иметь несколько экземпляров приложений Ruby и Java, обменивающихся сообщениями точка-точка в будущем. ).
  5. Простота отладки и профилирования.
  6. Хорошая документация и поддержка сообщества.
  7. Бонусные баллы за поддержку Clojure.
  8. Хорошая поддержка динамического языка.

Какую комбинацию формата сообщения и метода передачи вы бы порекомендовали? Почему?

Я собрал здесь некоторые материалы, которые мы уже собрали для ознакомления: Двигатель не работает Я разрабатываю программу для Android, которая обменивается данными через POST с программой App Engine, причем все на java. Когда я отправляю POST с помощью MultipartEntity, программа appengine не может видеть ни одну из моих переменных POST ...

Я разрабатываю программу для Android, которая обменивается данными через POST с программой App Engine, все на java. Когда я отправляю POST с помощью MultipartEntity, программа appengine не может видеть ни одну из моих переменных POST по какой-то причине, которую я не могу понять!

Код Appengine:

public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {
    resp.setContentType("text/plain");
    resp.getWriter().println("Output:");

    String mRoutine = req.getParameter("Routine");
    resp.getWriter().println("Routine: " + mRoutine);

    String mPMode = req.getParameter("PMode");
    resp.getWriter().println("PMode: " + mPMode);
}

Рабочий фрагмент Android:

HttpPost post = new HttpPost("http://XXX.appspot.com/Echo");
HttpClient client = new DefaultHttpClient();
post.setEntity(new UrlEncodedFormEntity(data,HTTP.UTF_8));
HttpResponse response = client.execute(post);
HttpEntity resmarkMessagesReadFrom = response.getEntity();
if (resmarkMessagesReadFrom != null) {
    Result_STR= "Response:\n" + EntityUtils.toString(resmarkMessagesReadFrom);
    mMSGBox.setText(Result_STR);
}

Неудачный фрагмент Android:

HttpPost post = new HttpPost("http://XXX.appspot.com/Echo");
HttpClient client = new DefaultHttpClient();
MultipartEntity reqmarkMessagesReadFrom = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);
try {
    reqmarkMessagesReadFrom.addPart("Routine", new StringBody("Neutral"));
    post.setEntity(reqmarkMessagesReadFrom);
    HttpResponse response = client.execute(post);
    HttpEntity resmarkMessagesReadFrom = response.getEntity();
    if (resmarkMessagesReadFrom != null) {
        Result_STR= "Response:\n" + EntityUtils.toString(resmarkMessagesReadFrom);
        mMSGBox.setText(Result_STR);
    }

9
задан systempuntoout 12 January 2011 в 14:27
поделиться