Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #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.
Ответить с цитированием
  #2 (permalink)  
Старый 10.01.2013, 13:19
Аватар для keen
Профессор
Отправить личное сообщение для keen Посмотреть профиль Найти все сообщения от keen
 
Регистрация: 28.03.2012
Сообщений: 376

т.е. асинхронный код выглядит как синхронный, и хрен поймёшь что и где сейчас выполняется?
Ответить с цитированием
  #3 (permalink)  
Старый 10.01.2013, 16:53
Профессор
Отправить личное сообщение для tenshi Посмотреть профиль Найти все сообщения от tenshi
 
Регистрация: 20.03.2008
Сообщений: 1,183

ты так говоришь будто это плохо
__________________
.ня
Ответить с цитированием
  #4 (permalink)  
Старый 10.01.2013, 17:02
Аватар для keen
Профессор
Отправить личное сообщение для keen Посмотреть профиль Найти все сообщения от keen
 
Регистрация: 28.03.2012
Сообщений: 376

да, это плохо.
неочевидное хуже чем очевидное.
непредсказуемое хуже чем предсказуемое.
Ответить с цитированием
  #5 (permalink)  
Старый 10.01.2013, 17:16
Профессор
Отправить личное сообщение для tenshi Посмотреть профиль Найти все сообщения от tenshi
 
Регистрация: 20.03.2008
Сообщений: 1,183

любое действие на языке высокого уровня делает столько неочевидных вещей, что если начнёшь обо всём этом задумываться, то быстро забудешь что вообще хотел сделать.
__________________
.ня
Ответить с цитированием
  #6 (permalink)  
Старый 10.01.2013, 17:46
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

Сообщение от tenshi
Мой вариант лаконичней:
если честно, вообще не заметил никакой разницы
Сообщение от tenshi
Так вот, загруженные таким образом модули заворачиваются в специальный прокси, который превращает асинхронный апи в синхронный.
а вот это классно эти коллбеки уже бесят
Ответить с цитированием
  #7 (permalink)  
Старый 10.01.2013, 18:03
Профессор
Отправить личное сообщение для tenshi Посмотреть профиль Найти все сообщения от tenshi
 
Регистрация: 20.03.2008
Сообщений: 1,183

когда один модуль подключает десяток других - это очень даже заметно)
__________________
.ня
Ответить с цитированием
  #8 (permalink)  
Старый 11.01.2013, 09:58
Аватар для keen
Профессор
Отправить личное сообщение для keen Посмотреть профиль Найти все сообщения от keen
 
Регистрация: 28.03.2012
Сообщений: 376

Сообщение от tenshi Посмотреть сообщение
любое действие на языке высокого уровня делает столько неочевидных вещей, что если начнёшь обо всём этом задумываться, то быстро забудешь что вообще хотел сделать.
так давайте же запутывать разработчика ещё больше?
это нововведение и читаемость кода понижает, и процесс отладки (а с учётом асинхронности он и так запутан) затрудняет.
Сообщение от melky Посмотреть сообщение
эти коллбеки уже бесят
может, яваскрипт не для вас?
Ответить с цитированием
  #9 (permalink)  
Старый 11.01.2013, 20:30
Профессор
Отправить личное сообщение для tadjik1 Посмотреть профиль Найти все сообщения от tadjik1
 
Регистрация: 07.06.2011
Сообщений: 315

keen,
так нет же, сила яваскрипта не в коллбеках, и отличная традиция — заворачивать их во что-нибудь, что на них не похоже.

а по самому фреймворку надо разбираться, но пример с днс чудесен, макароны просто бесят, не то, что надоели)
Ответить с цитированием
  #10 (permalink)  
Старый 11.01.2013, 21:15
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

Сообщение от keen
может, яваскрипт не для вас?
поржал. весь JS что ли асинхронный до ужаса?
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Node.js. Асинхронная логика PeaceCoder Библиотеки/Тулкиты/Фреймворки 4 28.07.2014 15:54
Востребованность разработчиков на Node.js danik.js AJAX и COMET 7 08.12.2012 22:49
Разработчик Node.js в США (Сиэтл) Akvelon Работа 0 29.08.2012 10:47
Javascript-разработчик (ExtJS, node.js), 50 000 - 80 000, СПб IrinaS Работа 0 03.04.2012 20:40
Node.js Kolyaj Серверные языки и технологии 49 24.05.2010 22:29