Git Product home page Git Product logo

node-sdch-proxy's People

Contributors

baranov1ch avatar rurenko avatar

Stargazers

 avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Forkers

rurenko skipor

node-sdch-proxy's Issues

Too long path

Иногда попрадаются очень длинные url:
http://ru.wikipedia.org/wiki/%D0%AD%D0%BD%D1%86%D0%B8%D0%BA%D0%BB%D0%BE%D0%BF%D0%B5%D0%B4%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D1%81%D0%BB%D0%BE%D0%B2%D0%B0%D1%80%D1%8C_%D0%91%D1%80%D0%BE%D0%BA%D0%B3%D0%B0%D1%83%D0%B7%D0%B0_%D0%B8_%D0%95%D1%84%D1%80%D0%BE%D0%BD%D0%B0
которые после преобразования становятся еще длиннее. В результате при попытке fs.createWriteStream( .. ) ловим ошибку:
Stream page: { [Error: ENAMETOOLONG, open './pages/wikipedia.org/%2Fwiki%2F%25D0%25AD%25D0%25BD%25D1%2586%25D0%25B8%25D0%25BA%25D0%25BB%25D0%25BE%25D0%25BF%25D0%25B5%25D0%25B4%25D0%25B8%25D1%2587%25D0%25B5%25D1%2581%25D0%25BA%25D0%25B8%25D0%25B9_%25D1%2581%25D0%25BB%25D0%25BE%25D0%25B2%25D0%25B0%25D1%2580%25D1%258C_%25D0%2591%25D1%2580%25D0%25BE%25D0%25BA%25D0%25B3%25D0%25B0%25D1%2583%25D0%25B7%25D0%25B0_%25D0%25B8_%25D0%2595%25D1%2584%25D1%2580%25D0%25BE%25D0%25BD%25D0%25B0']
errno: 49,
code: 'ENAMETOOLONG',
path: './pages/wikipedia.org/%2Fwiki%2F%25D0%25AD%25D0%25BD%25D1%2586%25D0%25B8%25D0%25BA%25D0%25BB%25D0%25BE%25D0%25BF%25D0%25B5%25D0%25B4%25D0%25B8%25D1%2587%25D0%25B5%25D1%2581%25D0%25BA%25D0%25B8%25D0%25B9_%25D1%2581%25D0%25BB%25D0%25BE%25D0%25B2%25D0%25B0%25D1%2580%25D1%258C_%25D0%2591%25D1%2580%25D0%25BE%25D0%25BA%25D0%25B3%25D0%25B0%25D1%2583%25D0%25B7%25D0%25B0_%25D0%25B8_%25D0%2595%25D1%2584%25D1%2580%25D0%25BE%25D0%25BD%25D0%25B0' }

написать суперскрипт перегенерации словаря

Скрипту на вход подается имя домена и некий rootdir

скрипт делает смотрит в rootdir/$(имя домена).

Предполагается, что там лежит пачка документов на обработку и еще есть специальный путь rootdir/$(имя домена)/automaton/serialized.pb, где лежит сериализованный суффиксный автомат.

Если какой-то из директорий нету, то скрипт их создает.

Если файлов документов в папке нету, скрипт создает все папки, возвращает 0 и ничего не пишет в stdout.
Если новые документы есть, скрипт запускает бинарник, лежащий где-то рядом. Описание бинарника тут: cscenter/SInGe#14
По окончанию работы бинарника, скрипт удаляет все из папки все документы которые он передал на обработку. Если в папку уже накидались новые, их надо оставить.

Если генератор завершился без ошибки, то скрипт тоже должен завершиться без ошибки (вернуть 0) и в stdout написать путь к словарю. Путь надо каждый раз делать какой-то товый.

Если генератор вернул ошибку, надо вернуть ее. При это файлы переданные на обработку надо все равно удалить.

Словари надо складывать по адресу rootdir/$(имя домена)/sdch/какое-то-рандомное-имя.dct

В качестве инструмента предлагаю использовать shelljs (https://github.com/arturadib/shelljs)

реализовать логику генерации словарей

Надо сделать, чтобы для каждого домена из списка в конфиге, пропустив через себя N запросов (и сохранив их в папку из #5) (N можно тоже задавать в конфиге для каждого домена отдельно) прокся запускала команду на перегенерацию словаря. Пусть пока это будет некий абстракный вызов чего угодно (внешнего скрипта) с помощью http://nodejs.org/api/child_process.html и передачей ему имени домена. Это что угодно тоже надо уметь задавать в конфиге (типа dictGenerator: 'update-dict.js'.

по окончанию этот скрипт выведет в stdout путь до нового словаря, если не завершится с ошибкой).

Надо будет взять этот путь и перегрузить словарь для домена из этого файла.

И так повторять до победы каждые N документов

разобраться с используемыми http клиентами/серверами

сейчас в тестах используется сырой http-клиент/сервер, в самой проксе express, superagent... лучше делать что-то одно. Во имя добра и котиков, предлагаю все переделать на сырой http, и не использовать superagent/express, тем более что есть подозрения что superagent падает

сделать возможность стримить тела страниц в файл вместе с отдачей клиенту.

надо в конфиге добавить возможность задавать список доменов, для которых страницы будут складываться в указанную по пути:
rootdir/$(domain name)/$(path)

rootdir будет задаваться тоже конфигом.

$(domain name) - имя домена

$(path) - путь. Видимо, слеши в урлах (и прочую нечисть) надо будет заэскейпить с помощью url esacping'а (гугл в помощь)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.