Показать сообщение отдельно
  #1 (permalink)  
Старый 09.01.2013, 23:28
Профессор
Отправить личное сообщение для tenshi Посмотреть профиль Найти все сообщения от tenshi
 
Регистрация: 20.03.2008
Сообщений: 1,183

Асинхронная синхронность в node.js
Изучение ноды я начал с создания собственного фреймворка. Основная задача оного - обеспечение модульности. Стандартный механизм не слишком удобен:

var connect= require( 'connect' )
var http= require( 'http' )
var app= connect( connect.static( 'public' ) )
http.createServer( app ).listen( 80 )


Мой вариант лаконичней:

$= require( 'jin' ).loader()
var app= $.connect( $.connect.static( 'public' ) )
$.http.createServer( app ).listen( 80 )


Так вот, загруженные таким образом модули заворачиваются в специальный прокси, который превращает асинхронный апи в синхронный.

Вот полный пример использования асинхронного апи:
var dns= require( 'dns' )
dns.lookup( 'google.com', function( err, res ){
    if( err ) return console.log( err )
    console.log( 'Google ip:', res )
} )


А вот его добавленная фреймворком синхронная версия:
require( 'jin' ).application( function( $ ){
    console.log( 'Google ip:', $.dns.lookupSync( 'google.com' ) )
    console.log( 'Yandex ip:', $.dns.lookupSync( 'yandex.com' ) )
} )


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

Больше примеров можно найти на сайте проекта: https://github.com/nin-jin/node-jin
__________________
.ня

Последний раз редактировалось tenshi, 11.01.2013 в 22:05.
Ответить с цитированием