RPC на JavaScript

Года три назад я написал материал об удаленных процедурах, выполняемых с помощью фреймворка GWT. В то время эта технология действительно выглядела прорывом. Еще бы: клиентский и серверный код пишутся на одном и том же языке! Но за прошедшее время произошло много событий, которые побуждают меня всё чаще писать на чистом JavaScript, особенно там, где не требуется задействовать мощные библиотеки и API.

На стороне сервера использую Node.js, развивающийся в последние месяцы просто космическими темпами. На стороне же клиента — не менее интенсивно развивающийся jQuery, который, помимо возможности рисовать красивые интерфейсы, содержит мощные средства выполнения асинхронных запросов. Ну, а посредником между клиентом и сервером может выступать код в формате JSON (я и раньше его иногда использовал, в GWT для этого есть необходимые пакеты).

Вот как можно организовать передачу JSON-объекта на сервер. На стороне клиента:

var queryParams = {greeting: 'Hello, World!', someBool: true};
$.getJSON('/hello', queryParams, function(data){
     // асинхронный разбор прилетевшего с сервера JSON-объекта.
}


Как принять на стороне сервера (задействован пакет express):

app.get('/hello', function (req, res) {
    res.setHeader('Content-Type', 'application/json; charset=utf-8');
    var someObject = {
        replay: 'Воистину ' + req.query.greeting,
        yesOrNo: req.query.someBool
    };
    res.send(JSON.stringify(someObject));
}


Вот так, довольно бесхитростно. Учитывая то, что с сервера можно присылать довольно сложные объекты, этот метод вполне может заменить GWT в экспресс-проектах, когда городить огород некогда и незачем.

Комментарии (3)

RSS свернуть / развернуть
+
0
Пожалуй грузить gwt клиенту бывает довольно обломно, какой-то он немаленький прям скажем)
avatar

Sergei_T

  • 09 декабря 2012, 12:37
+
0
Распространенное заблуждение.

Однажды я по линии фриланса написал страничку с гуглемапсами, где показывалось как добраться из пункта А в пункт Б и какие на пути встречаются достопримечательности. Пока всё это лежало в тестовой директории на моем сайте, заказчика всё устраивало, хвалил (хвалить нужно было, конечно, не меня, а мощные библиотеки GWT, позволяющие творить чудеса в том числе и с картами). Когда же я ему прислал архив с откомпилированным кодом, он просто-таки возопил благим матом:«Что за дикий объем! Ты хоть понимаешь, сколько браузеру грузить всего придется!». Все попытки объяснить, что это всего лишь пермутаци, призванные обеспечить кроссбраузерность и что грузиться будут они не все, а в зависимости от ситуации и порциями, ни к чему не привели. Пришлось для этого идиота переписывать на стандартном JS. Когда же в итоге он не увидел в новом варианте трех четвертей бывших красот и удобств и попросил всё вернуть, я послал его в пешее эротическое путешествие, ибо сам не знает чего хочет.

GWT ничего «своего» не грузит, а лишь переводит мысли с языка Java на язык JavaScript, попутно очень не хило оптимизируя. А вот если задействовать какое-нибудь ExtGWT, не имеющее к классическому GWT никакого идеологического отношения, то да, будет грузиться много всего и по сети, и в рунтиайме. Поэтому я пользуюсь только кошерными фреймворками.
avatar

yababay

  • 09 декабря 2012, 15:31
+
0
Буду знать.
Заказчик странный какой-то)
avatar

Sergei_T

  • 10 декабря 2012, 01:10

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.