Страница 1 из 3

Как умно сохранить длинную строку джаваскриптом на сервере?

Добавлено: 01.05.2014 11:40
orleanz
Вот мне надо БЫЛО сохранять джаваскриптом длинные (1-2М) строки в базу на сервере, по небыстрым каналам связи - мобильный интернет (иногда даже EDGE)

чтобы с показом реального прогресса операции и с возможность умного рестарта после обрыва связи

Я сделал это по быстрому сам -

1. для строки считается чексумма
2. строка разбивается на короткие блоки,
3. последовательные аджакс пост-запросы кидают блоки на сервер
4. там они сохраняются во временной таблице
5. потом, когда последний блок сохранен, они на сервере соединяются в исходную строку, временные блоки удаляеются из таблицы
6. проверяется на всякий пожарный случай чексумма (хотя наверно это не надо, не было ни одного раза чтобы чексуммма не сошлась, протокол HTTP похоже гарантирует целостность данных)

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

все прекрасно работает, на клиенте js, на сервере - python на джанго.

но может, я изобретаю велосипед? может, все это делается какой нибудь профессиональной либой, которую можно заиспользовать в проекте?

повторюсь, все прекрасно работает как есть, но хочется совершенства.

если такой либы нет - может, есть смысл выложить мое решение для публики в открытый доступ? ведь задача адски generic - умное сохранение строк джаваскриптом, такое нужно тысячам людей, зачем каждый раз самому писать...

Re: Как умно сохранить длинную строку джаваскриптом на серве

Добавлено: 01.05.2014 14:36
sergNN
скажи, встречный вопрос. когда ты постишь картинку на сервер, размером в твои мегабайты, ты понимаешь как это происходит ?

Re: Как умно сохранить длинную строку джаваскриптом на серве

Добавлено: 01.05.2014 17:07
orleanz
sergNN писал(а):скажи, встречный вопрос. когда ты постишь картинку на сервер, размером в твои мегабайты, ты понимаешь как это происходит ?
а что там понимать? и что меняет это понимание?

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

так что это совсем не в тему.

Re: Как умно сохранить длинную строку джаваскриптом на серве

Добавлено: 03.05.2014 12:27
sena
orleanz писал(а): но может, я изобретаю велосипед? может, все это делается какой нибудь профессиональной либой, которую можно заиспользовать в проекте?
Поздравляю тебя, ты сделал на коленках протокол TCP/IP. Другими словами, ты изобрёл велосипед! То что ты делаешь уже реализовано в протоколе TCP/IP - разбиение на пакеты, пересылка, сборка пакетов обратно.

То есть достаточно для твоей задачи - открыть сокет, начать закачку, если связь прервалась, установить связь опять и продолжить закачку. Зачем всё то, что ты нагородил???

Re: Как умно сохранить длинную строку джаваскриптом на серве

Добавлено: 03.05.2014 16:10
orleanz
sena писал(а):
orleanz писал(а): но может, я изобретаю велосипед? может, все это делается какой нибудь профессиональной либой, которую можно заиспользовать в проекте?
Поздравляю тебя, ты сделал на коленках протокол TCP/IP. Другими словами, ты изобрёл велосипед! То что ты делаешь уже реализовано в протоколе TCP/IP - разбиение на пакеты, пересылка, сборка пакетов обратно.

То есть достаточно для твоей задачи - открыть сокет, начать закачку, если связь прервалась, установить связь опять и продолжить закачку. Зачем всё то, что ты нагородил???
читаем внимательно - речь идет про джаваскрипт. Обычные js в вебстраничке. Тот который alert('vasja pupkin'), ага. Какие сокеты нафиг?

или ты имеешь в виду HTML5 ВебСокеты? Мой способ работает для любого сервера, для вебсокетов нужен сервер который их поддерживает. И вообще, Вебсокеты - это мощный оверкилл - там можно иметь двухстороннюю коммуникаюцию, я же просто сохраняю строку на сервер, неужели не понятно.

Re: Как умно сохранить длинную строку джаваскриптом на серве

Добавлено: 04.05.2014 13:50
швейцар001

Re: Как умно сохранить длинную строку джаваскриптом на серве

Добавлено: 04.05.2014 17:23
sena
orleanz писал(а): читаем внимательно - речь идет про джаваскрипт. Обычные js в вебстраничке. Тот который alert('vasja pupkin'), ага. Какие сокеты нафиг?
Я на джаваскрипте писал написал строчек 100 за всю жизнь. Но у тебя же есть и другая сторона - сервер? Там же у тебя есть что-то серверное, джава там или php?

Re: Как умно сохранить длинную строку джаваскриптом на серве

Добавлено: 05.05.2014 10:00
orleanz
sena писал(а):
orleanz писал(а): читаем внимательно - речь идет про джаваскрипт. Обычные js в вебстраничке. Тот который alert('vasja pupkin'), ага. Какие сокеты нафиг?
Я на джаваскрипте писал написал строчек 100 за всю жизнь. Но у тебя же есть и другая сторона - сервер? Там же у тебя есть что-то серверное, джава там или php?
обычный олдскульный js не поддерживает обычные сокеты которые у тебя есть в крестах например, (так же как множество другие вещей, из-за ограничени секьюрити, например ты не можешь джаваскриптом с вебстраницы отформатировать посетителю сайта диск Ц, und das ist gut so )

но поскольку нечто похожее нужно в реальной жизни (для чатов, например), в последние годы, в рамках ХТМЛ5, замутили ВебСокеты, которые упомянуты в исходном постенге, но которые представляют мощный оверкилл по сравнению с моим подходом и требованиями.

Re: Как умно сохранить длинную строку джаваскриптом на серве

Добавлено: 05.05.2014 10:11
orleanz
швейцар001 писал(а):http://socket.io/
тема в принципе хорошая, но у меня на стороне сервера не Нодэ а обычный Джанго который out-of-the-box не поддеживает socket.io

конечно можно запустить параллельно с джанго и Нодэ, и обмениваться данными между ними, но это не совсем элегантно.

Re: Как умно сохранить длинную строку джаваскриптом на серве

Добавлено: 05.05.2014 12:00
orleanz
orleanz писал(а):
швейцар001 писал(а):http://socket.io/
тема в принципе хорошая, но у меня на стороне сервера не Нодэ а обычный Джанго который out-of-the-box не поддеживает socket.io

конечно можно запустить параллельно с джанго и Нодэ, и обмениваться данными между ними, но это не совсем элегантно.
и потом, я не уверен что в сокет.ио есть именно то, что я спрашиваю - репорт о прогрессе в процентах строки, и рестарт с места разрыва. Вот упорно люди не хотят читать исходный постинг. Блин, прочтите, там пару предложений всего. Еще раз повторяю: прогресс бар и рестарт не с начала а с разрыва.