The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Выпуск серверной JavaScript-платформы Node.js 0.10"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Изначальное сообщение [ Отслеживать ]

"Выпуск серверной JavaScript-платформы Node.js 0.10"  +/
Сообщение от opennews (??) on 12-Мрт-13, 00:44 
Вышел (http://blog.nodejs.org/2013/03/11/node-v0-10-0-stable/) стабильный релиз Node.js 0.10 (http://nodejs.org/), платформы для выполнения высокопроизводительных сетевых приложений на языке JavaScript. Платформа может быть использована как для серверного сопровождения работы Web-приложений, так и для создания обычных клиентских и серверных сетевых программ. Для расширения функциональности приложений для Node.js подготовлена большая коллекция модулей (https://github.com/ry/node/wiki/modules), в которой можно найти модули с  реализацией  серверов и клиентов HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3, модули для интеграции с различными web-фреймворками, обработчики WebSocket и Ajax, коннекторы к СУБД (MySQL, PostgreSQL, SQLite, MongoDB), шаблонизаторы, CSS-движки, реализации криптоалгоритмов и систем авторизации (OAuth), XML-парсеры.

Для обеспечения обработки большого числа параллельных запросов Node.js задействует асинхронную модель запуска кода, основанную на обработке событий в неблокирующем режиме и определении callback-обработчиков. В качестве способов мультиплексирования соединений поддерживаются такие методы, как epoll, kqueue, /dev/poll и select. Для мультиплексирования соединений используется библиотека libuv (https://github.com/joyent/libuv/), которая является надстройкой над libev (http://software.schmorp.de/pkg/libev.html) в системах Unix и над IOCP в Windows. Для создания пула потоков (thread pool) задействована библиотека libeio (http://software.schmorp.de/pkg/libeio.html), для выполнения DNS-запросов в неблокирующем режиме интегрирован c-ares (http://c-ares.haxx.se/). Все системные вызовы, вызывающие блокирование, выполняются внутри пула потоков и затем, как и обработчики сигналов, передают результат своей работы обратно через неименованный канал (pipe). Выполнение JavaScript-кода обеспечивается через задействование разработанного компанией Google движка V8 (http://code.google.com/p/v8/).  


По своей сути Node.js похож на фреймворки Perl AnyEvent (http://search.cpan.org/dist/AnyEvent/), Ruby Event Machine (http://rubyeventmachine.com/) и Python Twisted (http://twistedmatrix.com/), но цикл обработки событий (event loop) в Node.js скрыт от разработчика и напоминает обработку событий в web-приложении, работающем в браузере. При написании приложений для node.js необходимо учитывать специфику событийно-ориентированного программирования, например, вместо выполнения "var result = db.query("select..");" с ожиданием завершения работы и последующей обработкой результатов, в Node.js использует принцип асинхронного выполнения, т.е. код трансформируется в "db.query("select..", function (result) {обработка результата});", при котором управление мгновенно перейдёт к дальнейшему коду, а результат запроса будет обработан по мере поступления данных. Ни одна функция в Node.js не должна напрямую выполнять операции ввода/вывода - для получения данных с диска, от другого процесса или из сети требуется установка callback-обработчика.


Наиболее заметные новшества (https://github.com/joyent/node/wiki/Api-changes-between-v0.8...), добавленные в Node.js 0.10:

-  Новая реализация API для работы с потоками ввода/вывода - Streams2 (http://blog.nodejs.org/2012/12/20/streams2/), устраняющая некоторые ранее проявляющиеся проблемы, такие как невозможность прочитать только фиксированное число байт, оставив остальную часть потока для дальнейшей обработки. Кроме того, новая система позволила перевести все потоки в ядре Node.js на использование единого набора легко расширяемых классов, а также упростила создание потоковых интерфейсов в пользовательских приложениях. Новое API Streams2 также доступно в виде модуля readable-stream (https://npmjs.org/package/readable-stream) для прошлых выпусков Node.js, при этом 37 модулей в репозитории уже используют (https://npmjs.org/browse/depended/readable-stream) данный API;

-  Модуль domain (http://nodejs.org/api/domain.html), позволяющий связать несколько разных операций ввода/вывода и выполнить их обработку в виде единой группы, зафиксирован в плане функциональности и переведён из разряда экспериментальных в категорию нестабильных, а в будущем будет позиционирован как стандартный способ обработки ошибок в Node.js;

-  Проведена большая работа по оптимизации производительности, что отразилось в заметном ускорении выполнении тестов, по сравнению с веткой 0.8. Некоторые тесты, особенно связанные с вводом/выводом и шифрованием, в новой версии выполняются быстрее в разы;

-  Изменен способ обработки функции process.nextTick(), которая теперь не привязана к циклу обработки событий и не зависит от операций ввода/вывода. Новая реализация process.nextTick() отличается  соблюдением точности callback-вызова, вне зависимости от интенсивности ввода/вывода;

-  Переработана работа сборщика мусора, активация которого стала более предсказуемой. Если ранее сборщик мусора пытался планировать запуск чистки с оглядкой на состояние памяти и простой системы, из-за чего было невозможно предсказать, когда он активируется и как долго будет выполняться, особенно на нагруженных системах, то в новой версии логика вызова сборщика мусора ложится целиком на JavaScript-движок V8, который достаточно продвинут в плане самостоятельной организации чистки мусора. В результате, отзывчивость система стала более постоянной и предсказуемой.

Следующим этапом развития  Node.js станет выпуск 0.12, в котором будет сделан акцент на улучшении реализации поддержки HTTP и, возможно, в качестве базовой реализации TLS будет возвращён модуль tlsnappy (https://github.com/indutny/tlsnappy). После этого начнётся подготовка знакового релиза 1.0, который ознаменует собой определённую завершённость базовой функциональности,  стабилизацию API и переход к более жёстким критериям обеспечения обратной совместимости.

URL: http://blog.nodejs.org/2013/03/11/node-v0-10-0-stable/
Новость: http://www.opennet.me/opennews/art.shtml?num=36366

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


2. "Выпуск серверной JavaScript-платформы Node.js 0.10"  +/
Сообщение от ip1981 (ok) on 12-Мрт-13, 01:01 
Копировать файлы не через гланды там всё ещё никак?
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

7. "Выпуск серверной JavaScript-платформы Node.js 0.10"  +2 +/
Сообщение от _Vitaly_ (ok) on 12-Мрт-13, 01:46 
> Копировать файлы не через гланды там всё ещё никак?

pipe() https://github.com/nodeca/fs-tools/blob/master/lib/fs-tools.... . Ну или какой-нибудь микромодуль возьмите, их навалом. Не та проблема, в общем.

Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

9. "Выпуск серверной JavaScript-платформы Node.js 0.10"  +2 +/
Сообщение от XoRe (ok) on 12-Мрт-13, 02:26 
> Копировать файлы не через гланды там всё ещё никак?

А напуркуа вам асинхронный сервер приложений для этой цели?

Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

18. "Выпуск серверной JavaScript-платформы Node.js 0.10"  –6 +/
Сообщение от slowpoke on 12-Мрт-13, 09:49 
ой да ладно ассинхронный, однопоточное тормозилово к которому пытаются пристегнуть множество потоков ввода вывода которые все одно ждут этот один поток.
Ответить | Правка | ^ к родителю #9 | Наверх | Cообщить модератору

20. "Выпуск серверной JavaScript-платформы Node.js 0.10"  +2 +/
Сообщение от 1 (??) on 12-Мрт-13, 10:06 
очередной быдлонетовский неосилятор :)
Ответить | Правка | ^ к родителю #18 | Наверх | Cообщить модератору

28. "Выпуск серверной JavaScript-платформы Node.js 0.10"  –1 +/
Сообщение от slowpoke on 12-Мрт-13, 11:29 
офигенные аргументы. я продукты дяди билла не пользую
Ответить | Правка | ^ к родителю #20 | Наверх | Cообщить модератору

40. "Выпуск серверной JavaScript-платформы Node.js 0.10"  +/
Сообщение от exist on 12-Мрт-13, 16:27 
Причем здесь Уильям Г.? Или вы о ком-то другом?
Ответить | Правка | ^ к родителю #28 | Наверх | Cообщить модератору

63. "Выпуск серверной JavaScript-платформы Node.js 0.10"  +/
Сообщение от Аноним (??) on 13-Мрт-13, 03:59 
> ассинхронный

асинхронный. ass - это ты.

> однопоточное тормозилово

Лол. nginx вон однопоточный - рассказать как он рвёт апачи и прочую чушь аж с несколькими моделями параллельности?

> одно ждут этот один поток

Никто там никого не ждёт, лол.

Ответить | Правка | ^ к родителю #18 | Наверх | Cообщить модератору

69. "Выпуск серверной JavaScript-платформы Node.js 0.10"  +/
Сообщение от Michael Shigorin email(ok) on 13-Мрт-13, 17:41 
> nginx вон однопоточный

Он не однопоточный, он мультиплексирующий многопоточный.

> рассказать как он рвёт апачи

За счёт и других отличий, помимо модели обработки соединений.

Ответить | Правка | ^ к родителю #63 | Наверх | Cообщить модератору

72. "Выпуск серверной JavaScript-платформы Node.js 0.10"  –1 +/
Сообщение от AlexAT (ok) on 13-Мрт-13, 19:58 
>>> рассказать как он рвёт апачи

Ну расскажи. Условие - динамика/CGI, или PHP как модуль (lol).

Ответить | Правка | ^ к родителю #63 | Наверх | Cообщить модератору

76. "Выпуск серверной JavaScript-платформы Node.js 0.10"  +/
Сообщение от XoRe (ok) on 18-Мрт-13, 16:58 
>>>> рассказать как он рвёт апачи
> Ну расскажи. Условие - динамика/CGI, или PHP как модуль (lol).

php, как модуль nginx o_O ? :)

А вообще тут разговор не о запускании php, а об обработке соединений, c которой nginx справляется на отлично (за счет epoll/kqueue).
apache с mpm-event не тестировал, поэтому сравнить не могу.

Ответить | Правка | ^ к родителю #72 | Наверх | Cообщить модератору

77. "Выпуск серверной JavaScript-платформы Node.js 0.10"  +/
Сообщение от AlexAT (ok) on 19-Мрт-13, 07:21 
> php, как модуль nginx o_O ? :)

Именно. Хотелось послушать, как nginx порвёт апач в данном случае :)

> А вообще тут разговор не о запускании php, а об обработке соединений

Одно дело отдавать лежащие на диске / в кешах статические элементы / проксировать, и совсем другое - собственно обработка логики. Для последней задачи nginx совершенно не предназначен, и "порвать" полноценные серверы на этом поле не то что не сможет, а просто не умеет.

> c которой nginx справляется на отлично (за счет epoll/kqueue).

Не за счёт epoll/kqueue. За счёт однопоточной модели обработки запросов (воркеры возможны, но это де факто все равно одиночные потоки) по принципу конечного автомата. Очень хорошо тогда, когда сам сервер может определять timeslice для отдачи блоков, и никак для динамики, когда все равно надо запускать дочерние процессы.

> apache с mpm-event не тестировал, поэтому сравнить не могу.

А это делать бесполезно. nginx - скорее "болид F1", а Apache - "БелАЗ". Разные весовые категории и применения :) Первый заточен на скорость по специальной трассе, второй - на проходимость и решение сложных задач :)


Ответить | Правка | ^ к родителю #76 | Наверх | Cообщить модератору

78. "Выпуск серверной JavaScript-платформы Node.js 0.10"  +/
Сообщение от XoRe (ok) on 19-Мрт-13, 19:17 
>> php, как модуль nginx o_O ? :)
> Именно. Хотелось послушать, как nginx порвёт апач в данном случае :)

Никак. Под nginx нет модуля php)
Мне кажется, мы с вами уже дискутировали ранее насчет nginx vs apache в плане работы с php.
Поэтому, давайте кратко.
Если для вас apache+mod_php работает лучше, чем nginx+php-fastcgi, ради бога используйте его.
Если вы хотите убедить в этом других, предоставьте что-то кроме своих слов.
Мне самому интересно было бы посмотреть, в каком случае это так.
У вас есть ссылка на статью или обсуждение с замерами?

Ответить | Правка | ^ к родителю #77 | Наверх | Cообщить модератору

79. "Выпуск серверной JavaScript-платформы Node.js 0.10"  +/
Сообщение от AlexAT (ok) on 19-Мрт-13, 19:39 
> Мне кажется, мы с вами уже дискутировали ранее насчет nginx vs apache

Нет.

> Если вы хотите убедить в этом других, предоставьте что-то кроме своих слов.

Лично пресловутого анонима я ни в чём переубеждать не хочу. Фанатичные пользователи наколенных поляпок только потому "что они где-то там (где есть штат программистов пилить вечную бету) рвут всех" ничего, кроме сочувствия, никогда не вызывали.

Вкратце: если мне надо будет отдать много прокси/статики - я выберу nginx. Ибо шансов завалиться у него на такой конфигурации немного, и модель отдачи подходящая. Если много динамики (хоть PHP, хотя Java, хоть еще чего) - Apache - из-за процессной модели, устойчивой к обвалам. Если ASP - IIS, из-за безвариантовости. А пытаться ездить на Ламборджини по проселочной трассе с прикрученными метровыми квадратными колёсами (угу, FastCGI)...

Ответить | Правка | ^ к родителю #78 | Наверх | Cообщить модератору

80. "Выпуск серверной JavaScript-платформы Node.js 0.10"  +/
Сообщение от XoRe (ok) on 20-Мрт-13, 15:57 
> Если много динамики (хоть PHP, хотя Java, хоть еще
> чего) - Apache - из-за процессной модели, устойчивой к обвалам.

У вас были прецеденты, где обваливался nginx, а Apache держал нагрузку?

Ответить | Правка | ^ к родителю #79 | Наверх | Cообщить модератору

81. "Выпуск серверной JavaScript-платформы Node.js 0.10"  +/
Сообщение от AlexAT (ok) on 21-Мрт-13, 07:17 
> У вас были прецеденты, где обваливался nginx, а Apache держал нагрузку?

Не только прецеденты, но и вполне реальные грабли.
segfault в apache/prefork(itk) - это смерть одного соединения.
segfault в nginx - это смерть всех текущих соединений. Разница легко ощутима.

Ответить | Правка | ^ к родителю #80 | Наверх | Cообщить модератору

82. "Выпуск серверной JavaScript-платформы Node.js 0.10"  +/
Сообщение от koloboid (ok) on 21-Мрт-13, 08:04 
> segfault в apache/prefork(itk) - это смерть одного соединения.
> segfault в nginx - это смерть всех текущих соединений. Разница легко ощутима.

о_О и часто у Вас apache и nginx сегфолтятся?

Ответить | Правка | ^ к родителю #81 | Наверх | Cообщить модератору

83. "Выпуск серверной JavaScript-платформы Node.js 0.10"  +/
Сообщение от AlexAT (ok) on 21-Мрт-13, 09:16 
>> segfault в apache/prefork(itk) - это смерть одного соединения.
>> segfault в nginx - это смерть всех текущих соединений. Разница легко ощутима.
> о_О и часто у Вас apache и nginx сегфолтятся?

nginx с динамикой сегфолтился каждый второй день. Это было на бородатой 0.8.2. А еще страшно не умел chunked. После этого было решено им пользоваться только для проксей и фронтендов - на статике не падает.

На критичных участках даже на фронтах - апач с worker/event. Сейчас ситуация могла измениться, но в целом даже тестирование уже не окупится - смысла ломать стабильно работающие узлы нет.

Опять же - да - ситуация личная. В моем случае проще (и дешевле!) смасштабироваться горизонтально, чем пытаться допилить вечную бету для хайлоада до рабочего состояния. Ну и нет у меня задач с приоритетом оптимизации нагрузки - есть задачи с приоритетом стабильности и поддерживаемости сторонними лицами.

Ответить | Правка | ^ к родителю #82 | Наверх | Cообщить модератору

84. "Выпуск серверной JavaScript-платформы Node.js 0.10"  +/
Сообщение от edwin3d email on 21-Мрт-13, 09:30 
> nginx с динамикой сегфолтился каждый второй день. Это было на бородатой 0.8.2.
> А еще страшно не умел chunked. После этого было решено им
> пользоваться только для проксей и фронтендов - на статике не падает.

Добрый день.
Простите за интерес, а какие у Вас (хоть ориентировано) показатели нагрузки ?
В плане к-ва запросов, трафика и т.д. ?
Мне интересно как общего развития, т.к. у меня динамику отдает Tomcat, спрятанный за nginx ...  

Ответить | Правка | ^ к родителю #83 | Наверх | Cообщить модератору

85. "Выпуск серверной JavaScript-платформы Node.js 0.10"  +/
Сообщение от XoRe (ok) on 21-Мрт-13, 22:55 
>> У вас были прецеденты, где обваливался nginx, а Apache держал нагрузку?
> Не только прецеденты, но и вполне реальные грабли.
> segfault в apache/prefork(itk) - это смерть одного соединения.
> segfault в nginx - это смерть всех текущих соединений. Разница легко ощутима.

Вообще segfault - это уже само по себе плохо.
И всегда можно откопать причину, с помощью gdb, strace и т.д.

Потом, у nginx можно задать несколько процессов-обработчиков.
Да, есть один master, как и у apache, но он врядли упадет (как и у apache).

И потом, nginx общается с динамикой не внутри своего процесса, а через fcgi/wsgi/proxy/...
Скажем, если упадет процесс php-fpm, процессу nginx от этого ничего не станет, он просто передаст запрос следующему процессу, или серверу в upstream.
Например недавно был баг в pinba, изза которого php процесс падал в segfault при авторизации на сайте.
php процесс падал, а nginx спокойно передавал запросы дальше.
В том и плюс nginx, что он динамику внутри себя не обрабатывает, он занимается передачей запросов - сам он не страдает от падучести динамики.
Имейте это в виду при дальнейшем росте.

Ответить | Правка | ^ к родителю #81 | Наверх | Cообщить модератору

86. "Выпуск серверной JavaScript-платформы Node.js 0.10"  +/
Сообщение от AlexAT (ok) on 22-Мрт-13, 07:18 
> Вообще segfault - это уже само по себе плохо.

Именно. Но в случае динамики у Вас оно может быть достаточно легко, потому что объём выполняемого кода достаточно велик. Это не проксирование/статика.

> Потом, у nginx можно задать несколько процессов-обработчиков.
> И потом, nginx общается с динамикой не внутри своего процесса, а через
> fcgi/wsgi/proxy/...

И всё это печально одним... нет, даже двумя моментами.
а) Apache - очень хороший менеджер процессов, куда лучше, чем во многих имплементациях FCGI. В частности PHP как FCGI лучше даже не рассматривать.
б) Если у Вас падает воркер или FCGI - всё становится невесело. Потому, что обрываются ВСЕ запросы, связанные с данным воркером/FCGI-процессом. А не один упавший. В случае FCGI еще и рестартер держать придётся.

У Apache в данном случае еще одно преимущество - корневой процесс минималистичный, вылизывался годами сотнями людей, и шанс его падения близок к 0. Поэтому доверия к нему куда больше, чем к nginx+FPM/FCGI.

А в общем да - я с вами согласен. nginx - неплохой фронтенд (хотя и сырой, имхо). На бэкендах будет всегда оставаться что-то иное.

---

Еще немножко оффтопа, пожалуй.

Не зря у пользователей nginx часто ассоциируется с 502. 502 в нашем случае - это не вина nginx - это ошибка бэкенда. Но вся суть в том, что при использовании FCGI/FPM/... вся система получается несколько более падучей. Не только из за числа компонентов, но и из-за сравнительной ненадежности реализации.

По факту - nginx _очень_ хорош для масштабных применений - в качестве load balancer к десяткам worker backends. Когда его ляпают на каждый чих из-за фанатизма - это дает хреновый результат.

Я всегда сравниваю nginx с FreeBSD в этом плане - такое же мелкое нишевое "самопальное" решение, которое в России почему-то пытаются воткнуть каждой бочке затычкой, получая пачки костылей и крайне ненадежные системы. И лишь единицам с приличным выделенным штатом под костылинг удаётся добиться реальных результатов, причем иногда - выдающихся.

Ответить | Правка | ^ к родителю #85 | Наверх | Cообщить модератору

87. "Выпуск серверной JavaScript-платформы Node.js 0.10"  +/
Сообщение от XoRe (ok) on 22-Мрт-13, 16:38 
> И всё это печально одним... нет, даже двумя моментами.
> а) Apache - очень хороший менеджер процессов, куда лучше, чем во многих
> имплементациях FCGI. В частности PHP как FCGI лучше даже не рассматривать.
> б) Если у Вас падает воркер или FCGI - всё становится невесело.
> Потому, что обрываются ВСЕ запросы, связанные с данным воркером/FCGI-процессом. А не
> один упавший. В случае FCGI еще и рестартер держать придётся.
> У Apache в данном случае еще одно преимущество - корневой процесс минималистичный,
> вылизывался годами сотнями людей, и шанс его падения близок к 0.
> Поэтому доверия к нему куда больше, чем к nginx+FPM/FCGI.

Вообще-то для FCGI уже есть php-fpm.
У php-fpm корневой процесс - тоже самое, что у apache, так же занимается минимумом дел.
И от ошибок дочерних процессов не падает.

> Я всегда сравниваю nginx с FreeBSD в этом плане

А Apache - это linux типа?

Ответить | Правка | ^ к родителю #86 | Наверх | Cообщить модератору

3. "Выпуск серверной JavaScript-платформы Node.js 0.10"  –1 +/
Сообщение от Аноним (??) on 12-Мрт-13, 01:07 
У руби и перла есть Phusion Passenger к nginx
А в ноде это безысходность из соплей
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

5. "Выпуск серверной JavaScript-платформы Node.js 0.10"  +2 +/
Сообщение от Leisure Suit Larry on 12-Мрт-13, 01:32 
> У руби

версия == 1.9.x

у nodejs
версия == 0.10

phusionpassenger.com:
- WSGI support is in beta
- Node.js support is coming up next

может пора таблетки принять и прекратить истерику?

и таки где перл? ткни носом, пожалуйста. или ты про WSGI?

Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

13. "Выпуск серверной JavaScript-платформы Node.js 0.10"  +/
Сообщение от www2 (??) on 12-Мрт-13, 06:05 
У Perl'а свой велосипед - PSGI.
Ответить | Правка | ^ к родителю #5 | Наверх | Cообщить модератору

10. "Выпуск серверной JavaScript-платформы Node.js 0.10"  –1 +/
Сообщение от XoRe (ok) on 12-Мрт-13, 02:29 
> У руби и перла есть Phusion Passenger к nginx
> А в ноде это безысходность из соплей

Phusion Passenger - вот это точно от безысходности.
С nodejs можно работать через обычный proxy_pass.

Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

12. "Выпуск серверной JavaScript-платформы Node.js 0.10"  +1 +/
Сообщение от Ушастик on 12-Мрт-13, 04:45 
Через обычный proxy_pass можно работать и с Руби. Тема высосана из пальца.
Ответить | Правка | ^ к родителю #10 | Наверх | Cообщить модератору

14. "Выпуск серверной JavaScript-платформы Node.js 0.10"  –7 +/
Сообщение от Аноним (??) on 12-Мрт-13, 09:06 
Ребята как можно в здравом уме и памяти применять клиентский язык на сервере? У него тысяча способов отстрелить себе ногу. Использование динамических языков на сервере я лично считаю очень плохим решением.
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

15. "Выпуск серверной JavaScript-платформы Node.js 0.10"  +3 +/
Сообщение от piteri (ok) on 12-Мрт-13, 09:16 
Проблемы у этих ребят не в неправильном выборе языка.
Ответить | Правка | ^ к родителю #14 | Наверх | Cообщить модератору

16. "Выпуск серверной JavaScript-платформы Node.js 0.10"  +/
Сообщение от Аноним (??) on 12-Мрт-13, 09:17 
Очень забавлял баг когда GC тормозил выполнение VM на 5 сек периодически.
Хотя для клиента фича годная. Вообще ждем dart.
Ответить | Правка | ^ к родителю #14 | Наверх | Cообщить модератору

17. "Выпуск серверной JavaScript-платформы Node.js 0.10"  +1 +/
Сообщение от лох on 12-Мрт-13, 09:48 
> Ребята как можно в здравом уме и памяти применять клиентский язык на сервере?

1. Что такое "клиентский язык" ? Пожалуйста, определение.
2. Что такое "сервер"? Как относиться к запросам "серверного языка", например, к той же БД, к DNS, да хоть к файловой системе? Они серверные или нет?

> У него тысяча способов отстрелить себе ногу.

у каждого человека -- миллионы таких способов.

> Использование динамических языков на сервере я лично считаю очень плохим решением.

А что такое "динамический язык", видимо, некая противоположность "статическому"? Приведите пример "статического" языка и "хорошего решения".
Хотя, похоже, с вашими познаниями о языках лучше вам писать на форуме филфака.

Ответить | Правка | ^ к родителю #14 | Наверх | Cообщить модератору

37. "(offtopic) языковое"  +/
Сообщение от Michael Shigorin email(ok) on 12-Мрт-13, 14:46 
> Как относиться к запросам "серверного языка", например, к
> той же БД, к DNS, да хоть к файловой системе?

Относиться стоит сдержанно. :)

> Хотя, похоже, с вашими познаниями о языках лучше вам писать на форуме филфака.

При всём уважении -- но и у филфака нам можно поучиться языковой грамоте; http://tsya.ru

А вообще да, претензия к динамическим языкам была крайне невнятной.

Ответить | Правка | ^ к родителю #17 | Наверх | Cообщить модератору

48. "(offtopic) языковое"  +/
Сообщение от Аноним (??) on 12-Мрт-13, 19:25 
Да ну всё это к лешему. Михаил лучше скажи, как человек посматривающий по сторонам, есть где тфтп с скриптованием по событию? Вот файлик залили - надо один скрипт пиннуть, слили другой - ещё один скрипт пнули.
Ответить | Правка | ^ к родителю #37 | Наверх | Cообщить модератору

54. "(offtopic) tftpd с реакцией"  +/
Сообщение от Michael Shigorin email(ok) on 12-Мрт-13, 20:00 
> есть где тфтп с скриптованием по событию?

Не встречал; погулил наскоро "scripted tftpd" -- не клюёт, а вот на "smart tftpd" под конец первой страницы выдачи нашёлся https://lists.fedorahosted.org/pipermail/cobbler-devel/2010-... -- гляньте, может, ближе к нужному.  Изменяя тему ответа, понял, что искать стоило "tftpd with hooks" -- вроде тоже что-то есть, посмотрите уж сами.

Ответить | Правка | ^ к родителю #48 | Наверх | Cообщить модератору

88. "(offtopic) tftpd с реакцией"  +/
Сообщение от Аноним (??) on 23-Мрт-13, 12:10 
Вот-вот. И спрашивается: как хранят конфиги железок админы? Лично мне кажется правильным поднять какую-нибудь vcs и туда tftp сливает конфиги. А после приёма файлика дёргает коммит скриптом. Вот ты нашёл что-то довольно тяжёлое для такой простой вещи. Снизу предлагают самому навелосипедить. Это конечно тоже вариант. Но разве никто в мире не делал такую простую вещь? Странно что нет ничего из_коробки для таких вариантов.
Ответить | Правка | ^ к родителю #54 | Наверх | Cообщить модератору

89. "(offtopic) tftpd с реакцией"  +/
Сообщение от Michael Shigorin email(ok) on 23-Мрт-13, 16:03 
> Вот-вот. И спрашивается: как хранят конфиги железок админы?

Не железкоадмин -- возможно, лучше отловить pilot на #altlinux и спросить, как по уму.

Ответить | Правка | ^ к родителю #88 | Наверх | Cообщить модератору

58. "(offtopic) языковое"  +1 +/
Сообщение от anonymous (??) on 12-Мрт-13, 21:51 
> Да ну всё это к лешему. Михаил лучше скажи, как человек посматривающий
> по сторонам, есть где тфтп с скриптованием по событию? Вот файлик
> залили - надо один скрипт пиннуть, слили другой - ещё один
> скрипт пнули.

Не Михаил, но тоже внесу свои 5 копеек - реализация протокола крайне простая, можно написать самому (или взять готовый модуль). Я когда озадачился этой проблемой, взял http://wiki.tcl.tk/12711 и дописал чуть кода. Заняло времени меньше, чем поиск готового решения =)

Ответить | Правка | ^ к родителю #48 | Наверх | Cообщить модератору

59. "(offtopic) языковое"  +/
Сообщение от Клейстер on 12-Мрт-13, 21:55 
> Да ну всё это к лешему. Михаил лучше скажи, как человек посматривающий
> по сторонам, есть где тфтп с скриптованием по событию? Вот файлик
> залили - надо один скрипт пиннуть, слили другой - ещё один
> скрипт пнули.

inotify в лице inncron чем не угодил?
afaik, событие CLOSE_WRITE

Ответить | Правка | ^ к родителю #48 | Наверх | Cообщить модератору

19. "Выпуск серверной JavaScript-платформы Node.js 0.10"  +/
Сообщение от slowpoke on 12-Мрт-13, 09:50 
nodejs это модно и молодежно!
Ответить | Правка | ^ к родителю #14 | Наверх | Cообщить модератору

32. "Выпуск серверной JavaScript-платформы Node.js 0.10"  +2 +/
Сообщение от Аноним (??) on 12-Мрт-13, 12:40 
erlang же. Всё остальное ломанные костыли.
Ответить | Правка | ^ к родителю #19 | Наверх | Cообщить модератору

44. "Выпуск серверной JavaScript-платформы Node.js 0.10"  +/
Сообщение от Kriss on 12-Мрт-13, 18:38 
Эрланг уже пошло и ни разу не молодежно
Ответить | Правка | ^ к родителю #32 | Наверх | Cообщить модератору

57. "Выпуск серверной JavaScript-платформы Node.js 0.10"  +/
Сообщение от Аноним (??) on 12-Мрт-13, 21:49 
Это на нем работает mail.ru ? xDDD
Ответить | Правка | ^ к родителю #32 | Наверх | Cообщить модератору

23. "Выпуск серверной JavaScript-платформы Node.js 0.10"  +/
Сообщение от zy on 12-Мрт-13, 10:50 
Какая разница что вы там считаете если заказчик платит за скорость разработки. А то касается производительности, так вроде 2013 год на дворе.
Ответить | Правка | ^ к родителю #14 | Наверх | Cообщить модератору

29. "Выпуск серверной JavaScript-платформы Node.js 0.10"  +1 +/
Сообщение от slowpoke on 12-Мрт-13, 11:31 
там скорость разработки только готовое пристегнуть или веб сервер в три строки, а как что то серьезное начинаешь писать сразу понимаешь что можно было сто раз на другом все это написать
Ответить | Правка | ^ к родителю #23 | Наверх | Cообщить модератору

64. "Выпуск серверной JavaScript-платформы Node.js 0.10"  +1 +/
Сообщение от Аноним (??) on 13-Мрт-13, 04:04 
> Ребята как можно в здравом уме и памяти применять клиентский язык на сервере?

Нет такого понятия как "клиентский язык". javascript можно применять везде, и ниша у него пошире будет чем, например, у многих устоявшихся скриптовых языков. И производительность повыше.

> У него тысяча способов отстрелить себе ногу.

Как и у любого языка, включая "ынтерпрайз стандарты".

> Использование динамических языков на сервере я лично считаю очень плохим решением.

И кому есть дело до твоего мнения?

Ответить | Правка | ^ к родителю #14 | Наверх | Cообщить модератору

21. "Выпуск серверной JavaScript-платформы Node.js 0.10"  +1 +/
Сообщение от Филипп Филиппович (ok) on 12-Мрт-13, 10:26 
Мне всегда было интересно, как применять Twisted без генераторов Python. Писать сколько-нибудь сложную логику на callback'ах -- мучение. Другое дело, когда используешь генератор, который в тех местах, где нужно ждать callback'а, выдаёт из генератора объект.

А там всё действительно только на callback'ах? Поскольку языкового механизма вроде бы нет.

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

24. "Выпуск серверной JavaScript-платформы Node.js 0.10"  +/
Сообщение от exist on 12-Мрт-13, 10:51 
>> Писать сколько-нибудь сложную логику на callback'ах -- мучение.

С модулем "async" легко и непринужденно.

Ответить | Правка | ^ к родителю #21 | Наверх | Cообщить модератору

26. "Выпуск серверной JavaScript-платформы Node.js 0.10"  +3 +/
Сообщение от Филипп Филиппович (ok) on 12-Мрт-13, 11:08 
Посмотрел на https://github.com/caolan/async/blob/master/test/test-async.js. По первому впечатлению, тоже не очень удобно. В Twisted это делается с использованием defer.deferredGenerator, при этом пишется обычный код (локальные переменные, ветвления и циклы используются без ограничений), и только точки разрыва оформляются как yield. К сожалению, в JS нет языкового механизма, чтобы, сохранив стек и все переменные во всех областях видимости по этому стеку, продолжить выполнение в другом месте, а впоследствии вернуться. Что, вообще говоря, жаль. Впрочем, справедливости ради скажу, что Twisted, конечно, тоже не образец простоты... Но после однократного освоения такие вещи там делаются на порядок проще.
Ответить | Правка | ^ к родителю #24 | Наверх | Cообщить модератору

30. "Выпуск серверной JavaScript-платформы Node.js 0.10"  +1 +/
Сообщение от exist on 12-Мрт-13, 11:35 
Дело привычки, не более :)
Ответить | Правка | ^ к родителю #26 | Наверх | Cообщить модератору

47. "Выпуск серверной JavaScript-платформы Node.js 0.10"  +/
Сообщение от Филипп Филиппович (ok) on 12-Мрт-13, 19:10 
С этим трудно не согласиться. :-)

Ответить | Правка | ^ к родителю #30 | Наверх | Cообщить модератору

33. "Выпуск серверной JavaScript-платформы Node.js 0.10"  +1 +/
Сообщение от _Vitaly_ (ok) on 12-Мрт-13, 13:03 
> Посмотрел на https://github.com/caolan/async/blob/master/test/test-async.js. По
> первому впечатлению, тоже не очень удобно. В Twisted это делается с
> использованием defer.deferredGenerator, при этом пишется обычный код (локальные переменные,
> ветвления и циклы используются без ограничений), и только точки разрыва оформляются
> как yield. К сожалению, в JS нет языкового механизма, чтобы, сохранив
> стек и все переменные во всех областях видимости по этому стеку,
> продолжить выполнение в другом месте, а впоследствии вернуться. Что, вообще говоря,
> жаль. Впрочем, справедливости ради скажу, что Twisted, конечно, тоже не образец
> простоты... Но после однократного освоения такие вещи там делаются на порядок
> проще.

Для ниасиляторов есть node-fibers. Но лично я таким советую php.

Ответить | Правка | ^ к родителю #26 | Наверх | Cообщить модератору

46. "Выпуск серверной JavaScript-платформы Node.js 0.10"  +2 +/
Сообщение от Филипп Филиппович (ok) on 12-Мрт-13, 19:01 
> Для ниасиляторов есть node-fibers. Но лично я таким советую php.

Проблема совсем не в том, что это трудно "осилить". Человек, который "осиливает" сопрограммы, заведомо "осилит" и callback'и. Для этого не требуется семи пядей во лбу, сложного-то ничего в них нет. Проблема в том, что получается громоздко.

На чистом C тоже можно писать объектно-ориентированные программы, и их пишут, что характерно (и иногда это вполне оправданно). И до тех пор, пока не нужно сложных вещей, это будет работать, порой не хуже, чем на C++. Но когда потребуется выбор вызываемой функции в зависимости от реального класса объекта (не от типа указателя, а от того, что по этому указателю лежит), придётся изобретать замену готовому механизму виртуальных функций и каждый раз писать обращение к ней. Так и тут.

Ответить | Правка | ^ к родителю #33 | Наверх | Cообщить модератору

51. "Выпуск серверной JavaScript-платформы Node.js 0.10"  –2 +/
Сообщение от _Vitaly_ (ok) on 12-Мрт-13, 19:41 
Многа букф ниачом. Пора уже вместо рассуждений хоть что-то попробовать.
Ответить | Правка | ^ к родителю #46 | Наверх | Cообщить модератору

53. "Выпуск серверной JavaScript-платформы Node.js 0.10"  +/
Сообщение от Филипп Филиппович (ok) on 12-Мрт-13, 19:51 
А вот node-fibers дейтсвительно даёт код, похожий на Питоновские генераторы.
Ответить | Правка | ^ к родителю #33 | Наверх | Cообщить модератору

60. "Выпуск серверной JavaScript-платформы Node.js 0.10"  +1 +/
Сообщение от anonymous (??) on 12-Мрт-13, 21:59 
> Посмотрел на https://github.com/caolan/async/blob/master/test/test-async.js. По
> первому впечатлению, тоже не очень удобно. В Twisted это делается с
> использованием defer.deferredGenerator, при этом пишется обычный код (локальные переменные,
> ветвления и циклы используются без ограничений), и только точки разрыва оформляются
> как yield. К сожалению, в JS нет языкового механизма, чтобы, сохранив
> стек и все переменные во всех областях видимости по этому стеку,
> продолжить выполнение в другом месте, а впоследствии вернуться. Что, вообще говоря,
> жаль. Впрочем, справедливости ради скажу, что Twisted, конечно, тоже не образец
> простоты... Но после однократного освоения такие вещи там делаются на порядок
> проще.

Если уж зашла речь об асинхронно-событийной парадигме, то не стоит ли попробовать, к примеру, Tcl? Очень сильно развитая часть языка, при этом, использовать ее действительно просто. При этом, язык не столь экзотичен, как erlang (функциональное программирование все же многим людям непривычно). Если нравится использовать coroutine и yield - смотрите сразу на ветку 8.6, хотя я использую преимущественно 8.5 без yield и программировать все равно удобно.

Ответить | Правка | ^ к родителю #26 | Наверх | Cообщить модератору

65. "Выпуск серверной JavaScript-платформы Node.js 0.10"  –2 +/
Сообщение от Аноним (??) on 13-Мрт-13, 04:08 
> Если уж зашла речь об асинхронно-событийной парадигме, то не стоит ли попробовать,
> к примеру, Tcl?

tcl умер ещё до перла. И синтаксис в нём ещё более отвратительный.

Ответить | Правка | ^ к родителю #60 | Наверх | Cообщить модератору

70. "Выпуск серверной JavaScript-платформы Node.js 0.10"  +2 +/
Сообщение от Michael Shigorin email(ok) on 13-Мрт-13, 17:43 
> tcl умер ещё до перла. И синтаксис в нём ещё более отвратительный.

Это разве что для чайников, которых устраивает каждые пару лет лопатить свои тонны эээ... прелестного кода.

И синтаксис -- всего лишь следствие подхода, если кому испортили мозги бей^Wимперативщиной, ну так ему любой иной подход будет непривычен.

Ответить | Правка | ^ к родителю #65 | Наверх | Cообщить модератору

68. "Выпуск серверной JavaScript-платформы Node.js 0.10"  +/
Сообщение от Филипп Филиппович (ok) on 13-Мрт-13, 10:33 
Erlang, кстати, мне очень нравится и к некоторым задачам моей команды подходит идеально. И вообще есть мечта пописАть на функциональном языке. А в Erlang, помимо функциональной парадигмы, есть ещё и очень эффективный параллелизм с легковесными процессами, которые можно создавать тысячами.

К сожалению, трудно это намерение воплотить в жизнь по работе, т.к. не очень правильно писАть на том, что мало кто в компании знает, если это не даёт какого-то уж очень радикального выигрыша. А радикального не даёт, увы. Так уж вышло, что по работе мне вообще регулярно приходится убеждать людей не делать того, что самому хотелось бы (например, недавно один весьма уважаемый мною разработчик из другого отдела хотел прикрутить к проекту Haskell; это было бы очень красиво, но я его отговорил: ради той мелочи, которая была ему нужна, добавлять к проекту ещё один язык, тем более довольно "эзотерический", было бы не очень разумно). И, если уж поступать честно, то и самому приходится от подобных вывертов воздерживаться.

Ответить | Правка | ^ к родителю #60 | Наверх | Cообщить модератору

71. "Выпуск серверной JavaScript-платформы Node.js 0.10"  +/
Сообщение от Michael Shigorin email(ok) on 13-Мрт-13, 18:20 
> К сожалению, трудно это намерение воплотить в жизнь по работе,
> т.к. не очень правильно писАть на том, что мало кто в компании знает

Спросите Нетча, он может рассказать про то, как у нас обучали отдел эрлангистов.

Ответить | Правка | ^ к родителю #68 | Наверх | Cообщить модератору

74. "Выпуск серверной JavaScript-платформы Node.js 0.10"  +/
Сообщение от Филипп Филиппович (ok) on 14-Мрт-13, 09:00 
Да, история была бы интересна. Попробую.
Ответить | Правка | ^ к родителю #71 | Наверх | Cообщить модератору

73. "Выпуск серверной JavaScript-платформы Node.js 0.10"  +/
Сообщение от cyclope (??) on 13-Мрт-13, 22:27 
или альтернатива - Step. только там нужно понимать, что делаете, ибо можно потерять контроль за потоком выполнения
Ответить | Правка | ^ к родителю #24 | Наверх | Cообщить модератору

25. "Выпуск серверной JavaScript-платформы Node.js 0.10"  –5 +/
Сообщение от zy on 12-Мрт-13, 11:02 
Что за хрень вы несёте, в вашем twisted всё на обычных deffered объектах с такими же колбэками. На сколько мне известно вообще не существует других способов писать асинхронный код нежели использовать колбэки.

Ответить | Правка | ^ к родителю #21 | Наверх | Cообщить модератору

27. "Выпуск серверной JavaScript-платформы Node.js 0.10"  +3 +/
Сообщение от Филипп Филиппович (ok) on 12-Мрт-13, 11:10 
> Что за хрень вы несёте, в вашем twisted всё на обычных deffered
> объектах с такими же колбэками. На сколько мне известно вообще не
> существует других способов писать асинхронный код нежели использовать колбэки.

О, прибежал типичный опеннетчик. Выучить Twisted времени нет, Питона толком не знает, а вот про хрень порассуждать и похамить всегда готов. Погуглите defer.deferredGenerator. Внутри там, конечно, callback'и, но снаружи это вообще не видно.

Ответить | Правка | ^ к родителю #25 | Наверх | Cообщить модератору

31. "Выпуск серверной JavaScript-платформы Node.js 0.10"  +1 +/
Сообщение от rshadow (ok) on 12-Мрт-13, 12:26 
> На сколько мне известно вообще не существует других способов

Вы не правы. Следующий этап развития асинхронного программирования - короутины. http://ru.wikipedia.org/wiki/%D0%A1%D0%B...


Правда во многих языках поддержка либо номинальная, либо неудобная.

Ответить | Правка | ^ к родителю #25 | Наверх | Cообщить модератору

35. "Выпуск серверной JavaScript-платформы Node.js 0.10"  –2 +/
Сообщение от jOKer (ok) on 12-Мрт-13, 13:44 
Хы! Читал-читал, думал что же это такое знакомое до боли проглядывает сквозь ворох академического словоблудия.... Конечно же greenlets! Ну, если так, то тема, без условно, годная - я знаю не один проект использующий эту методику и с очень хорошими результатами. Причем, один из таких проектов я постоянно употребляю на продакшине - это gunicorn http://docs.gunicorn.org/en/latest/design.html
Ответить | Правка | ^ к родителю #31 | Наверх | Cообщить модератору

41. "Выпуск серверной JavaScript-платформы Node.js 0.10"  –1 +/
Сообщение от Сержант Скотч on 12-Мрт-13, 17:17 
вообще-то есть gevent.
Ответить | Правка | ^ к родителю #35 | Наверх | Cообщить модератору

50. "Выпуск серверной JavaScript-платформы Node.js 0.10"  +/
Сообщение от jOKer (ok) on 12-Мрт-13, 19:36 
> вообще-то есть gevent.

Который как раз и использует gunicorn "The asynchronous workers available are based on Greenlets (via Eventlet and Gevent). " См. http://docs.gunicorn.org/en/latest/design.html

Ответить | Правка | ^ к родителю #41 | Наверх | Cообщить модератору

43. "Выпуск серверной JavaScript-платформы Node.js 0.10"  +/
Сообщение от Аноним (??) on 12-Мрт-13, 17:59 
#  Nginx + uWSGI
uwsgi_enable="YES"
#uwsgi_flags="-L -M --vhost"
Ответить | Правка | ^ к родителю #35 | Наверх | Cообщить модератору

49. "Выпуск серверной JavaScript-платформы Node.js 0.10"  +/
Сообщение от jOKer (ok) on 12-Мрт-13, 19:32 
А можно пруф на спецификацию протокола uWSGI?

Потому как очень интересно:

- где/какими организациями этот протокол зарегистрирован
- какими продуктами (кроме сервера uWSGI) используется
- можно ли этот проткол (без мода) с nginx юзать

Потому что я без ответа на эти вопросы на продашене протокол как-то не привык юзать.

Ответить | Правка | ^ к родителю #43 | Наверх | Cообщить модератору

45. "Выпуск серверной JavaScript-платформы Node.js 0.10"  +/
Сообщение от Филипп Филиппович (ok) on 12-Мрт-13, 18:48 
greenlets -- это то, что используется в gevent. И это ещё одно решение с близкими к Twisted функциями. То, что в Twisted сделано чисто Питоновскими сопрограммами на генераторах, там сделано на более низком уровне. И везде есть свои преимущества.

На gevent/greenlets, по моему опыту, пишется легче, но отлаживается тяжелее (хотя IntelliJ Pycharm с некоторых пор умеет отлаживать такой код, большинство отладчиков не могут), а анализ покрытия кода тестами иногда выдаёт феерический бред. На Twisted код более громоздкий, но тестируется сравнительно легко. Утверждается, что gevent в связке с gunicorn позволяет эффективно параллелить работу, но этого я не делал, не было реальной нужды.

В общем, дело вкуса. Для обычных задач лично я больше люблю gevent, но для очень ответственных с параноидальными требованиями по надёжности -- Twisted.

Ответить | Правка | ^ к родителю #35 | Наверх | Cообщить модератору

34. "Выпуск серверной JavaScript-платформы Node.js 0.10"  +/
Сообщение от Andrey (??) on 12-Мрт-13, 13:29 
> А там всё действительно только на callback'ах? Поскольку языкового механизма вроде бы
> нет.

С помощью Reactive Extensions писать сложную бизнес логику проще чем на генераторах. https://github.com/Reactive-Extensions/RxJS

Ответить | Правка | ^ к родителю #21 | Наверх | Cообщить модератору

36. "Выпуск серверной JavaScript-платформы Node.js 0.10"  +2 +/
Сообщение от Andrey (??) on 12-Мрт-13, 13:47 
С помощью Reactive Extensions писать сложную бизнес логику проще чем на генераторах. Хотя это скорее не конкурирующий технологии, а приёмы, которые друг друга дополняют:
https://github.com/Reactive-Extensions/RxJS

Пример кода, который:

1. Читает данные из сокета
2. Находит сообщения в формате FIX и транслирует их в JSON
3. Результаты склеивает в список
4. Результат пишет в сокет

FixPP.prototype.prettyPrint = function(req, res) {
    req.readStream()
        .toBuffer()
        .select(this.findFixMessages.bind(this))
        .concatObservable()
        .subscribe(observerFromResponse(this.Rx, res));
};

Код асинхронный неблокирующий
Код легко покрывается тестами
Код представляет из себя набор простых операторов, которые ты собираешь как конструктор

Лично мне проще писать на JS чем на питоне, т.к. в JS есть нормальная лямбда

Ответить | Правка | ^ к родителю #34 | Наверх | Cообщить модератору

42. "Выпуск серверной JavaScript-платформы Node.js 0.10"  +1 +/
Сообщение от 50мгСчастья on 12-Мрт-13, 17:49 
> Пример кода, который:

что будет, если приедет невалидное из сокета или клиент просто отвалится?
вообщем, где обработка ошибок?

> Лично мне проще писать на JS чем на питоне, т.к. в JS
> есть нормальная лямбда

а в python есть gevent и много чего ещё.


Ответить | Правка | ^ к родителю #36 | Наверх | Cообщить модератору

56. "Выпуск серверной JavaScript-платформы Node.js 0.10"  +/
Сообщение от Andrey (??) on 12-Мрт-13, 20:37 
> что будет, если приедет невалидное из сокета или клиент просто отвалится?
> вообщем, где обработка ошибок?

Обработка ошибок - это как раз одна из сильных сторон Reactive Extensions. В моем примере ошибка будет пробрасываться по цепочке и в результате клиент получит ответ { status: "error", details: .... }

Например, можно создать функтор (failover), который перехватывает ошибки и повторяет попытку через время, и так, например, три раза, если ошибка не прекращается - увеличивает таймаут и т.д. Теперь этот функтор можно комбинировать с любой асинхронной операцией:

file.readAll().failover(times(3), sec(15))
socket.read().failover(times(10), sec(15))
topic.readMessages().failover(times(3), sec(3))

Дальше этот алгоритм можно покрыть тестами и прогнать их за одну милисекунду используя концепцию "виртуального времени" :). RX устроен таким образом, что вы не используете никаких Sleep-ов явно, а отправляете задачу в scheduler (ThreadPool, EventLoop, NewThread, Immediate ....) и указываете когда ее выполнить, поэтому в тестах как правило используется TestScheduler на котором время "течет" быстрее.

Библиотека спроектирована очень грамотно. Рекомендую ознакомительное видео http://channel9.msdn.com/Blogs/Charles/Erik-Meijer-Rx-in-15-...

Всякие futures, async, promises - это частный случай RX.

Еще очень легко управлять временем жизни ресурсов. Что делать, например, если возникла ошибка внутри сложного алгоритма или клиент нажал кнопку отмена и надо отписаться от событий, освободить ресурсы, но это уже тема для отдельного разговора ...

Ответить | Правка | ^ к родителю #42 | Наверх | Cообщить модератору

52. "Выпуск серверной JavaScript-платформы Node.js 0.10"  +/
Сообщение от Филипп Филиппович (ok) on 12-Мрт-13, 19:45 
Да, по ощущению, это не лишено красоты, хотя мне не хватает знания контекста, чтобы оценить в полной мере. Впечатления конкурирующей технологии действительно не производит.
Ответить | Правка | ^ к родителю #36 | Наверх | Cообщить модератору

61. "Выпуск серверной JavaScript-платформы Node.js 0.10"  +/
Сообщение от koloboid (ok) on 13-Мрт-13, 00:01 
смотрится неплохо, но

>There is no recommended release for this project.
>This project has no releases.
>This project does not have documentation yet. Visit the Discussions tab to ask questions.

...
Кроме того, у особых "ценителей", расположение проекта на кодплексе может вызывать необъяснимые приступы попоболи и баттхерта.

мне очень интересен Rx++ в частности.

Ответить | Правка | ^ к родителю #36 | Наверх | Cообщить модератору

22. "Выпуск серверной JavaScript-платформы Node.js 0.10"  +/
Сообщение от edwin email(??) on 12-Мрт-13, 10:31 
Решение интересное. хотя спорное .... надо будет пощупать, как оно по сравнению с рельсами ...
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

38. "Выпуск серверной JavaScript-платформы Node.js 0.10"  –2 +/
Сообщение от Аноним (??) on 12-Мрт-13, 15:07 
Щито?
Ваше сравнение будет не коректное. Из Ruby мира для сравнения скорее подходит event machine. А вобще nodejs часто используют вмете с какимто MVC фреймворком, например для того что б всторить на страничку чат. А вобще у меня складывается впечатление что nodejs это скорее для пхп-шников, так как в Python/Ruby есть свои годный асинхронные фреймворки.
Ответить | Правка | ^ к родителю #22 | Наверх | Cообщить модератору

55. "Выпуск серверной JavaScript-платформы Node.js 0.10"  +1 +/
Сообщение от Stax (ok) on 12-Мрт-13, 20:16 
Насчет пхп-шников согласен с выводами.
Ответить | Правка | ^ к родителю #38 | Наверх | Cообщить модератору

75. "Выпуск серверной JavaScript-платформы Node.js 0.10"  +/
Сообщение от Гуру on 16-Мрт-13, 22:21 
Образцами для разработчиков Node.js были EventMachine(Ruby) и Twisted(Python).
Как уже выше было совершенно верно подмечено.
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру