May. 1st, 2014
Вот мне надо было сохранять джаваскриптом длинные (1-2М) строки в базу на сервере, по небыстрым каналам связи - мобильный интернет (иногда даже EDGE)
чтобы с показом реального прогресса операции и с возможность рестарта после обрыва связи
Я сделал это по быстрому сам -
1. для строки считается чексумма
2. строка разбивается на короткие блоки,
3. последовательные аджакс пост-запросы кидают блоки на сервер
4. там они сохраняются во временной таблице
5. потом, когда последний блок сохранен, они на сервере соединяются в исходную строку, временные блоки удаляеются из таблицы
6. проверяется на всякий пожарный случай чексумма (хотя наверно это не надо, не было ни одного раза чтобы чексуммма не сошлась, протокол HTTP похоже гарантирует целостность данных)
при начале передачи - сервер сообщает, какие блоки для данной чексуммы у него уже есть, так что при разрыве начитается передача не с начала, а с точки обрыва - что удобно, когда клиент заехал на поезде в туннель и связь прервалась
все прекрасно работает, на клиенте js, на сервере - python на джанго.
но может, я изобретаю велосипед? может, все это делается какой нибудь профессиональной либой, которую можно заиспользовать в проекте?
повторюсь, все прекрасно работает как есть, но хочется совершенства.
если такой либы нет - может, есть смысл выложить мое решение для публики в открытый доступ? ведь задача адски generic - умное сохранение строк джаваскриптом, такое нужно тысячам людей, зачем каждый раз самому писать...
чтобы с показом реального прогресса операции и с возможность рестарта после обрыва связи
Я сделал это по быстрому сам -
1. для строки считается чексумма
2. строка разбивается на короткие блоки,
3. последовательные аджакс пост-запросы кидают блоки на сервер
4. там они сохраняются во временной таблице
5. потом, когда последний блок сохранен, они на сервере соединяются в исходную строку, временные блоки удаляеются из таблицы
6. проверяется на всякий пожарный случай чексумма (хотя наверно это не надо, не было ни одного раза чтобы чексуммма не сошлась, протокол HTTP похоже гарантирует целостность данных)
при начале передачи - сервер сообщает, какие блоки для данной чексуммы у него уже есть, так что при разрыве начитается передача не с начала, а с точки обрыва - что удобно, когда клиент заехал на поезде в туннель и связь прервалась
все прекрасно работает, на клиенте js, на сервере - python на джанго.
но может, я изобретаю велосипед? может, все это делается какой нибудь профессиональной либой, которую можно заиспользовать в проекте?
повторюсь, все прекрасно работает как есть, но хочется совершенства.
если такой либы нет - может, есть смысл выложить мое решение для публики в открытый доступ? ведь задача адски generic - умное сохранение строк джаваскриптом, такое нужно тысячам людей, зачем каждый раз самому писать...