cscenter / node-sdch-proxy Goto Github PK
View Code? Open in Web Editor NEWHTTP proxy with sdch compression support
HTTP proxy with sdch compression support
использовать md5
Разметка едет регулярно, news.yandex.ru не работает стабильно
expected undefined to include 'sdch'
это лучше, чем свой особый уличный велосипед
Иногда попрадаются очень длинные 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' }
Ловить на стадии http.request. Клиенту отдавать 503 ошибку и заголовок Retry-After: 60
сейчас в тестах используется сырой http-клиент/сервер, в самой проксе express, superagent... лучше делать что-то одно. Во имя добра и котиков, предлагаю все переделать на сырой http
, и не использовать superagent/express, тем более что есть подозрения что superagent падает
В данный момент программа просто падает
Чтобы браузер мог честно работать через прокси
сабж
Скрипту на вход подается имя домена и некий rootdir
скрипт делает смотрит в rootdir/$(имя домена).
Предполагается, что там лежит пачка документов на обработку и еще есть специальный путь rootdir/$(имя домена)/automaton/serialized.pb
, где лежит сериализованный суффиксный автомат.
Если какой-то из директорий нету, то скрипт их создает.
Если файлов документов в папке нету, скрипт создает все папки, возвращает 0 и ничего не пишет в stdout.
Если новые документы есть, скрипт запускает бинарник, лежащий где-то рядом. Описание бинарника тут: cscenter/SInGe#14
По окончанию работы бинарника, скрипт удаляет все из папки все документы которые он передал на обработку. Если в папку уже накидались новые, их надо оставить.
Если генератор завершился без ошибки, то скрипт тоже должен завершиться без ошибки (вернуть 0) и в stdout написать путь к словарю. Путь надо каждый раз делать какой-то товый.
Если генератор вернул ошибку, надо вернуть ее. При это файлы переданные на обработку надо все равно удалить.
Словари надо складывать по адресу rootdir/$(имя домена)/sdch/какое-то-рандомное-имя.dct
В качестве инструмента предлагаю использовать shelljs (https://github.com/arturadib/shelljs)
http://en.wikipedia.org/wiki/X-Forwarded-For
http://en.wikipedia.org/wiki/List_of_HTTP_header_fields (там есть про X-Forwarded-Proto)
В X-Real-IP надо положить ip клиента
надо в конфиге добавить возможность задавать список доменов, для которых страницы будут складываться в указанную по пути:
rootdir/$(domain name)/$(path)
rootdir
будет задаваться тоже конфигом.
$(domain name)
- имя домена
$(path)
- путь. Видимо, слеши в урлах (и прочую нечисть) надо будет заэскейпить с помощью url esacping'а (гугл в помощь)
сабж.
Надо сделать, чтобы для каждого домена из списка в конфиге, пропустив через себя N запросов (и сохранив их в папку из #5) (N можно тоже задавать в конфиге для каждого домена отдельно) прокся запускала команду на перегенерацию словаря. Пусть пока это будет некий абстракный вызов чего угодно (внешнего скрипта) с помощью http://nodejs.org/api/child_process.html и передачей ему имени домена. Это что угодно тоже надо уметь задавать в конфиге (типа dictGenerator: 'update-dict.js'
.
по окончанию этот скрипт выведет в stdout путь до нового словаря, если не завершится с ошибкой).
Надо будет взять этот путь и перегрузить словарь для домена из этого файла.
И так повторять до победы каждые N документов
для доменов из списка, который делается в #5
надо также собирать статистику по тому, сколько на какую страницу раз сходили.
складывать ее в json по адресу rootdir/$(domain name)/visited_stats.json
См. пример в connect-sdch модуле
сабж.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.