Ответ 1
Это я снова.: -)
CouchDB наследует супер concurrency обработку от Erlang, языка, на котором он был написан. Erlang использует легкие процессы и передачу сообщений между этими процессами для достижения отличной производительности при высокой одновременной нагрузке. Он также будет использовать все ядра процессора.
Nodejs запускает один процесс и в основном делает только одно за раз в этом процессе. Его основанный на событиях, неблокирующий подход ввода-вывода позволяет ему выполнять многозадачность, пока он ждет фрагменты ввода-вывода, но он по-прежнему выполняет только одно за раз.
Оба должны легко обрабатывать десятки тысяч подключений, но я бы ожидал, что CouchDB обработает concurrency лучше (и с меньшими усилиями с вашей стороны), чем Node. И имейте в виду, что Node добавляет некоторую задержку, если вы положили ее перед CouchDB. Это может быть заметно только в том случае, если вы используете их на разных машинах.
Написание непосредственно в Couch через TCPSocket является-ok, пока вы пишете хорошо сформированный HTTP-запрос, следующий за спецификацией. (Вы не передаете запрос faux... что настоящий HTTP-запрос, который вы отправляете, как и любой другой.)
Примечание. HTTP 1.1 требует, чтобы вы включили заголовок узла в запросе, поэтому вам нужно будет исправить свой код, чтобы отразить это ИЛИ, просто используйте HTTP 1.0, который не требует от него упрощения. (Мне любопытно, почему вы не используете Titanium.Network.HTTPClient. Это только дает вам тело запроса после завершения запроса или что-то еще?)
В любом случае, CouchDB может полностью обрабатывать прямые подключения и - если вы не приложите много усилий к прокси-серверу Node, это, вероятно, даст пользователям лучший опыт, когда у вас будет 100 тыс. из них, играющих в игру сразу.
EDIT: если вы используете Node, напишите фактический HTTP-прокси. Это будет работать намного быстрее, чем использовать предоставленный вами модуль и быть более простым в реализации. (Вместо того, чтобы определять свой собственный API, который затем делает запросы к Couch, вы можете просто передать определенные запросы на CouchDB и заблокировать другие, скажем, по соображениям безопасности.
Также посмотрите, как работает "многострочный": http://www.sitepen.com/blog/2010/07/14/multi-node-concurrent-nodejs-http-server/