powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Стратегия синхронизации данных между frontEnd и backEnd
66 сообщений из 66, показаны все 3 страниц
Стратегия синхронизации данных между frontEnd и backEnd
    #40001714
vb_sub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет, пишу приложение состоящее из frontEnd (NuxtJS) и BackEnd (Asp Core) части.
В результате работы пользователя происходит редактирование данных укрупненно представленных в виде следующей модели:
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
[
   {
      "parentID":"1",
      "children":[
         {
            "childID":"1"
         },
         {
            "childID":"2"
         },
         {
            "childID":"3"
         }
      ]
   },
   {
      "parentID":"2",
      "children":[
         {
            "childID":"4"
         },
         {
            "childID":"5"
         },
         {
            "childID":"6"
         }
      ]
   }
]



Изменение модели заключается в добавлении/удалении из массива корневых элементов ({"parentID":1...}), добавление/удаление дочерних элементов внутри родительских({"childID":"4"}). Я хочу сделать теневое сохранение результатов работы пользователя на BackEnd - по таймеру будет считываться данные с клиента и отправляться на бэкэнд для сохранения.
Соответственно я столкнулся с выбором стратегии сохранения данных.
1) Каждый раз отправляем полностью объект с данными для сохранения- на бэкэнде старый стираем, поверх него записываем новый.
+:
простота
отсутствие промежуточных состояний данных
-:
передача избыточных данных- они не поменялись, но все равно их сохраняем
2)На front храним предыдущую версию отправленных данных и отправляем только в том случае, если есть хоть одно отличие в сравнении с текущей
+:
Отбрасываем отправку дублирующих запросов
-:
Появляется хранение промежуточного состояния-уязвимая точка приложения, при падении которой происходит потеря последней версии данных
3)Создание на front логики, которая будет сравнивать текущее состояние данных и предыдущее сохранение и выделять конкретные группы изменений:
*созданные корневые ({"parentID":1...}) записи
*удаленные корневые записи
*редактированные корневые записи(изменения в массиве children)
на бэкэнд отправляется что-то вроде
Код: javascript
1.
2.
3.
4.
5.
{
  created:[],
  deleted:[],
  updates:[]
}

и на бэкэнде делается соответствующие команды для редактирования данных.
+:
минимально объем отправленных данных- отправляется только то, что действительно изменилось
-:
довольно сложная реализация
много этапов, на котором что-то может пойти не так и исказит данные
4)Дублируем каждое действие на front. То есть пользователь добавил корневой элемент- отправляем http-запрос сделать аналогичную команду с данными на бэкэнде, удалил, отредактировал- аналогично.
+:
не нужно хранить промежуточных состояний на front
несложная логика реализации
-:постоянный спам беэенда мелкими запросами, необходимость для пользовательского UI ждать, пока backend вернет ответ, что запрос прошел успешно.

Соответственно вопрос, возможно есть решение, которое лежит вне той плоскости, где выбирается между избыточностью отправляемых данных, простотой и минимально необходимым количеством http-запростов, но сложностью.
Какие есть best-practice для подобных ситуаций именно в архитектурном плане?Спасибо
...
Рейтинг: 0 / 0
Стратегия синхронизации данных между frontEnd и backEnd
    #40001834
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vb_sub,

и как часто эту вашу модель вообще редактировать будут?
если один раз отредактируют и забудут на месяц, то вариант 1 вполне себе подходит
...
Рейтинг: 0 / 0
Стратегия синхронизации данных между frontEnd и backEnd
    #40001919
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vb_sub
Соответственно вопрос, возможно есть решение, которое лежит вне той плоскости, где выбирается между избыточностью отправляемых данных, простотой и минимально необходимым количеством http-запростов, но сложностью.


Можете как-то по-точнее выразить задачу?
Что конкретно нужно?

vb_sub
Какие есть best-practice для подобных ситуаций именно в архитектурном плане?Спасибо


Лучшие практики применяются к задачам для достижения вполне определённых и конкретных результатов.

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

Без конкретики сложно о чём-то говорить.
...
Рейтинг: 0 / 0
Стратегия синхронизации данных между frontEnd и backEnd
    #40001967
vb_sub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA,
частота редактирования в пике-1 изменение в 3 секунды.
Объем редактированной информации-1 родительский объект({"parentID":1...}) или 1 дочерний внутри какого-либо родительского("childID":"4"}).
...
Рейтинг: 0 / 0
Стратегия синхронизации данных между frontEnd и backEnd
    #40001971
vb_sub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt,
все приведенные мной практики- компромиссные то есть улучшая какую-либо одну характеристику, приходится делать хуже другую.
Если кратко о задаче- то нужно чтобы на frontend и на backend был один и тот же объект данных, но редактирование этого объекта можно осуществлять только с frontend.
Сейчас рассматриваю возможность попробовать 4-й вариант, только не через http, а через webSocket соединение.
...
Рейтинг: 0 / 0
Стратегия синхронизации данных между frontEnd и backEnd
    #40002135
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сюрприз, но уэб-сокет это обёртка над хттп.
...
Рейтинг: 0 / 0
Стратегия синхронизации данных между frontEnd и backEnd
    #40002150
vb_sub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,
но судя по бенчмаркам и тестам на размер передаваемых данных сокеты лучше подходят для частой пересылки данных малыми объемами. Ну а что сюрприз, это да, я ожидал что сокеты будут пониже уровнем, чем http.
...
Рейтинг: 0 / 0
Стратегия синхронизации данных между frontEnd и backEnd
    #40002152
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vb_sub
skyANA,
частота редактирования в пике-1 изменение в 3 секунды.
Объем редактированной информации-1 родительский объект({"parentID":1...}) или 1 дочерний внутри какого-либо родительского("childID":"4"}).

Это типа пользователь раз в месяц зашёл и тут ткнул, через 3 секунды там ткнул, ещё через 3 сям?
А потом нажал "Сохранить"?
...
Рейтинг: 0 / 0
Стратегия синхронизации данных между frontEnd и backEnd
    #40002170
vb_sub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA,
пользователю каждый день приходит список ориентировочно на 300 элементов( {"childID":"1"} ... {"childID":"300"}) и он начинает их drag-and-drop'ом растаскивать по группам({parentID:"1","children":'список элементов, содержащихся в этой группе'}). Растаскивает до тех пор, пока каждый элемент не будет в какой-либо группе и может элементы между группами перекидывать.
Я хочу избавиться от кнопки "Сохранить", хочу чтобы это было автоматически. Ведь как приятно, что в Visual Studio не надо жать эту кнопку сохранения. И соответственно хочу перенести этот позитивный опыт в свое приложение.
...
Рейтинг: 0 / 0
Стратегия синхронизации данных между frontEnd и backEnd
    #40002531
Фотография OoCc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vb_sub
skyANA,
пользователю каждый день приходит список ориентировочно на 300 элементов( {"childID":"1"} ... {"childID":"300"}) и он начинает их drag-and-drop'ом растаскивать по группам({parentID:"1","children":'список элементов, содержащихся в этой группе'}). Растаскивает до тех пор, пока каждый элемент не будет в какой-либо группе и может элементы между группами перекидывать.
Я хочу избавиться от кнопки "Сохранить", хочу чтобы это было автоматически. Ведь как приятно, что в Visual Studio не надо жать эту кнопку сохранения. И соответственно хочу перенести этот позитивный опыт в свое приложение.

Я бы запускал XMLHttpRequest при каждом дропе.
...
Рейтинг: 0 / 0
Стратегия синхронизации данных между frontEnd и backEnd
    #40002843
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
Сюрприз, но уэб-сокет это обёртка над хттп.

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


Websocket это не обертка над HTTP.
HTTP просто позволяет переключиться на Websocket из HTTP не разрывая соединение.
Как только переключение произошло то протокол больше не имеет ничего общего с HTTP, он даже уже не текстовый, а бинарный.
...
Рейтинг: 0 / 0
Стратегия синхронизации данных между frontEnd и backEnd
    #40002856
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если после HTTP заголовка начать посылать бинарные данные, то это получится уже совершенно другой протокол? Ню-ню...
...
Рейтинг: 0 / 0
Стратегия синхронизации данных между frontEnd и backEnd
    #40002926
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
Если после HTTP заголовка начать посылать бинарные данные, то это получится уже совершенно другой протокол? Ню-ню..

Если бы только сервер посылал данные, то еще с натяжкой можно считать что это тело HTTP ответа (хотя ответ 101 в по стандарту HTTP не должен иметь тела, т.е. это уже не HTTP).
Но в вебсокете в обе стороны идут бинарные данные. Это 100% не HTTP.
...
Рейтинг: 0 / 0
Стратегия синхронизации данных между frontEnd и backEnd
    #40002941
Код: javascript
1.
2.
3.
4.
5.
6.
7.
ws = new WebSocket("ws://localhost:8888/dh");
var formdata = $('eventForm').serialize();
ws.onopen = function()
{
    ws.send(formdata);
};
// на сервер придёт строка, которую парсит url_parse()
...
Рейтинг: 0 / 0
Стратегия синхронизации данных между frontEnd и backEnd
    #40002946
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovsky
Но в вебсокете в обе стороны идут бинарные данные. Это 100% не HTTP.
Метод POST позволяет отправить и получить бинарные данные. Это "100% не HTTP"?
...
Рейтинг: 0 / 0
Стратегия синхронизации данных между frontEnd и backEnd
    #40002958
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov
Метод POST позволяет отправить и получить бинарные данные. Это "100% не HTTP"?

В вебсокете нет HTTP заголовков, нет ни POST ни GET. Он в принципе не может быть оберткой над HTTP.
Если взять HTTP прокси который не знает про вебсокет, то он не сможет ретранслировать вебсокет - он вернет ошибку клиенту на первом же байте данных после переключения протокола.
Что еще не понятно-то?
...
Рейтинг: 0 / 0
Стратегия синхронизации данных между frontEnd и backEnd
    #40002972
а AJAX это HTTP ?
...
Рейтинг: 0 / 0
Стратегия синхронизации данных между frontEnd и backEnd
    #40003016
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vb_sub
skyANA,
пользователю каждый день приходит список ориентировочно на 300 элементов( {"childID":"1"} ... {"childID":"300"}) и он начинает их drag-and-drop'ом растаскивать по группам({parentID:"1","children":'список элементов, содержащихся в этой группе'}). Растаскивает до тех пор, пока каждый элемент не будет в какой-либо группе и может элементы между группами перекидывать.
Я хочу избавиться от кнопки "Сохранить", хочу чтобы это было автоматически. Ведь как приятно, что в Visual Studio не надо жать эту кнопку сохранения. И соответственно хочу перенести этот позитивный опыт в свое приложение.

Тут подходит цепочка команд: добавить в группу такого-то родителя такой-то элемент, переместить его в группе перед таким-то элементом, после такого-то элемента.
Про удалить ничего не сказано, но может тоже понадобится.

Цепочку можно накапливать на клиенте и отправлять на сервер пачку команд, а можно и по одной.
...
Рейтинг: 0 / 0
Стратегия синхронизации данных между frontEnd и backEnd
    #40003017
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WebSocket - протокол поверх TCP.

Читайте спецификацию: https://tools.ietf.org/html/rfc6455
...
Рейтинг: 0 / 0
Стратегия синхронизации данных между frontEnd и backEnd
    #40003021
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Роза 2020
а AJAX это HTTP ?

Нет. Это вообще не протокол, а API ))
...
Рейтинг: 0 / 0
Стратегия синхронизации данных между frontEnd и backEnd
    #40003027
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovsky
Алексей Роза 2020
а AJAX это HTTP ?

Нет. Это вообще не протокол, а API ))

AJAX - это любое общение с сервером без перезагрузки страницы, организованное при помощи JavaScript.

К примеру создать iframe - это самый древний способ AJAX-запроса
...
Рейтинг: 0 / 0
Стратегия синхронизации данных между frontEnd и backEnd
    #40003051
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovsky
Но в вебсокете в обе стороны идут бинарные данные. Это 100% не HTTP.

Они так делают со времён появления в HTTP протоколе запроса CONNECT. Так что это не повод уэб-сокеты объявлять чем-то принципиально новым.
...
Рейтинг: 0 / 0
Стратегия синхронизации данных между frontEnd и backEnd
    #40003055
Anatoly Moskovsky
Нет. Это вообще не протокол, а API ))

у ws тоже API есть:
авторОбъект WebSocket предоставляет API для создания и управления вебсокет-подключения к серверу, а также для отправки и получения данных в этом подключении.
А у AJAX тоже есть свой XMLHTTPRequest... почти протокол
...
Рейтинг: 0 / 0
Стратегия синхронизации данных между frontEnd и backEnd
    #40003095
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
Они так делают со времён появления в HTTP протоколе запроса CONNECT. Так что это не повод уэб-сокеты объявлять чем-то принципиально новым.

Все правильно. Со времен изобретения байтов ничего принципиально нового не придумано
...
Рейтинг: 0 / 0
Стратегия синхронизации данных между frontEnd и backEnd
    #40003149
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поэтому разбудите меня когда JS через этот ваш уэб-сокет сможет подключаться прямо к серверу IRC, не требуя чтобы кто-то для него работал как прокси.
...
Рейтинг: 0 / 0
Стратегия синхронизации данных между frontEnd и backEnd
    #40003175
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovsky
Если взять HTTP прокси который не знает про вебсокет
Ему и не надо
...
Рейтинг: 0 / 0
Стратегия синхронизации данных между frontEnd и backEnd
    #40003176
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA
WebSocket - протокол поверх TCP.
Читайте спецификацию: https://tools.ietf.org/html/rfc6455
Странно вы как-то её читаете
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
1.2.  Protocol Overview

   _This section is non-normative._

   The protocol has two parts: a handshake and the data transfer.

   The handshake from the client looks as follows:

        GET /chat HTTP/1.1
        Host: server.example.com
        Upgrade: websocket
        Connection: Upgrade
        Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
        Origin:  http://example.com 
        Sec-WebSocket-Protocol: chat, superchat
        Sec-WebSocket-Version: 13

   The handshake from the server looks as follows:

        HTTP/1.1 101 Switching Protocols
        Upgrade: websocket
        Connection: Upgrade
        Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
        Sec-WebSocket-Protocol: chat
...
Рейтинг: 0 / 0
Стратегия синхронизации данных между frontEnd и backEnd
    #40003193
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
Поэтому разбудите меня когда JS через этот ваш уэб-сокет сможет подключаться прямо к серверу IRC, не требуя чтобы кто-то для него работал как прокси.
про wss слышал
Anatoly Moskovsky
он даже уже не текстовый, а бинарный.
всё что передаётся - бинарное. отличается только тем как это воспринимается на приемной стороне.
...
Рейтинг: 0 / 0
Стратегия синхронизации данных между frontEnd и backEnd
    #40003197
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovsky
Basil A. Sidorov
Метод POST позволяет отправить и получить бинарные данные. Это "100% не HTTP"?

В вебсокете нет HTTP заголовков, нет ни POST ни GET. Он в принципе не может быть оберткой над HTTP.
Если взять HTTP прокси который не знает про вебсокет, то он не сможет ретранслировать вебсокет - он вернет ошибку клиенту на первом же байте данных после переключения протокола.
Что еще не понятно-то?
спокойно проходит, главное что бы прокси поддерживал keep-alive и часто не срывался
https-прокси не может без злого умысла анализировать трафик, он даже запрос не видит, только адресс сайта

по сути дыра в безопасности, от чего уходили с вводом http, к тому и вернулись

PS: http-заголовок есть
...
Рейтинг: 0 / 0
Стратегия синхронизации данных между frontEnd и backEnd
    #40003223
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov,

The Upgrade header field is intended to provide a simple mechanism
for transition from HTTP/1.1 to some other, incompatible protocol.
Т.е. в в вашей ссылке прямо написано что это уже будет не HTTP ))
...
Рейтинг: 0 / 0
Стратегия синхронизации данных между frontEnd и backEnd
    #40003227
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)
спокойно проходит, главное что бы прокси поддерживал keep-alive и часто не срывался

Это вы с туннелированием через CONNECT путаете.
Там кстати тоже уже речь про HTTP не идет после создания туннеля.
...
Рейтинг: 0 / 0
Стратегия синхронизации данных между frontEnd и backEnd
    #40003250
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov
skyANA
WebSocket - протокол поверх TCP.
Читайте спецификацию: https://tools.ietf.org/html/rfc6455
Странно вы как-то её читаете
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
1.2.  Protocol Overview

   _This section is non-normative._

   The protocol has two parts: a handshake and the data transfer.

   The handshake from the client looks as follows:

        GET /chat HTTP/1.1
        Host: server.example.com
        Upgrade: websocket
        Connection: Upgrade
        Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
        Origin:  http://example.com 
        Sec-WebSocket-Protocol: chat, superchat
        Sec-WebSocket-Version: 13

   The handshake from the server looks as follows:

        HTTP/1.1 101 Switching Protocols
        Upgrade: websocket
        Connection: Upgrade
        Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
        Sec-WebSocket-Protocol: chat

Я то как раз её нормально читаю, а не только до места, где про handshake.

И даже досюда дочитав, можно было обратить внимание на "The protocol has two parts: a handshake and the data transfer."
И подумать о том, что же там за вторая часть.

И дойти таки до этого:
The WebSocket Protocol is an independent TCP-based protocol.
Its only relationship to HTTP is that its handshake is interpreted by HTTP servers as an Upgrade request.
...
Рейтинг: 0 / 0
Стратегия синхронизации данных между frontEnd и backEnd
    #40003262
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovsky
Т.е. в в вашей ссылке прямо написано что это уже будет не HTTP ))
Вы бы до конца дочитывали: "It does so by allowing the client to advertise its desire to use another protocol, such as a later version of HTTP with a higher major version number , even though the current request has been made using HTTP/1.1". У HTTP уже давно можно выкинуть HypterText и оставить только Transport.
Это всё, безусловно не нарушает формальную правильность вашего утверждения, но и смысла в нём не появляется.

Ну а WebSocket (с третьей попытки) сделали лентяи, которым лень подумать и понять, что WS-кадрирование можно делать разными способами и что разработка нового протокола - не самый лучший вариант.
...
Рейтинг: 0 / 0
Стратегия синхронизации данных между frontEnd и backEnd
    #40003268
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA
Я то как раз её нормально читаю, а не только до места, где про handshake.
Тогда у вас проблемы с логикой.
Если описывается инициализация протокола поверх HTTP, то это ещё не означает, что описываемый протокол будет работать поверх TCP.
HTTP, если что, требует только "clear 8-bit channel". Over-TCP, Over-Serial или over-Ethernet - дело десятое.
...
Рейтинг: 0 / 0
Стратегия синхронизации данных между frontEnd и backEnd
    #40003281
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov
skyANA
Я то как раз её нормально читаю, а не только до места, где про handshake.
Тогда у вас проблемы с логикой.
Если описывается инициализация протокола поверх HTTP, то это ещё не означает, что описываемый протокол будет работать поверх TCP.
HTTP, если что, требует только "clear 8-bit channel". Over-TCP, Over-Serial или over-Ethernet - дело десятое.

Все начинается так же как в обычном HTTP-запросе.
Браузер подключается по протоколу TCP на 80 порт сервера и дает немного необычный GET-запрос:

Код: sql
1.
2.
3.
4.
5.
GET /demo HTTP/1.1
Upgrade: WebSocket
Connection: Upgrade
Host: site.com
Origin: http://site.com



Если сервер поддерживает ВебСокеты, то он отвечает таким образом:

Код: sql
1.
2.
3.
4.
5.
HTTP/1.1 101 Web Socket Protocol Handshake
Upgrade: WebSocket
Connection: Upgrade
WebSocket-Origin: http://site.com
WebSocket-Location: ws://site.com/demo



Если браузер это устраивает, то он просто оставляет TCP-соединение открытым .
Все - «рукопожатие» совершено, канал обмена данными готов.
...
Рейтинг: 0 / 0
Стратегия синхронизации данных между frontEnd и backEnd
    #40003299
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov
Это всё, безусловно не нарушает формальную правильность вашего утверждения, но и смысла в нём не появляется.

Смысла там намного больше чем в утверждении что вебсокет работает поверх хттп, которое вы сами же и опровергли ))
Basil A. Sidorov
Ну а WebSocket (с третьей попытки) сделали лентяи, которым лень подумать и понять, что WS-кадрирование можно делать разными способами и что разработка нового протокола - не самый лучший вариант.

В HTTP невозможно реализовать p2p протокол такой как вебсокет.
Подумайте сами почему. Уверен, что вы найдете ответ в спеке, как и на предыдущий вопрос ))
...
Рейтинг: 0 / 0
Стратегия синхронизации данных между frontEnd и backEnd
    #40003339
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovsky
kealon(Ruslan)
спокойно проходит, главное что бы прокси поддерживал keep-alive и часто не срывался

Это вы с туннелированием через CONNECT путаете.
Там кстати тоже уже речь про HTTP не идет после создания туннеля.
ничего не путаю
htеps-прокси НЕ СЛЕДИТ ЗА ТЕМ КТО И ЧТО ОТПРАВЛЯЕТ, он просто поддерживает переброску
если ему сказали что нужно держать соедение как можно возможно дольше, он это и будет делать

метод Connect к этому отношения не имеет
...
Рейтинг: 0 / 0
Стратегия синхронизации данных между frontEnd и backEnd
    #40003360
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)
htеps-прокси НЕ СЛЕДИТ ЗА ТЕМ КТО И ЧТО ОТПРАВЛЯЕТ, он просто поддерживает переброску
если ему сказали что нужно держать соедение как можно возможно дольше, он это и будет делать

Удачи, вам еще многое предстоит открыть ))
...
Рейтинг: 0 / 0
Стратегия синхронизации данных между frontEnd и backEnd
    #40003386
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovsky,

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

обычный древний IIS который, с отключенным CONNECT, свободно тунелит WebSocket вообще о нём ничего не зная - это 7 лет назад я спокойно делал

а в веб-сервер естественно надо функционал такой добавлять, сам он не появится
...
Рейтинг: 0 / 0
Стратегия синхронизации данных между frontEnd и backEnd
    #40003399
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)
обычный древний IIS который, с отключенным CONNECT, свободно тунелит WebSocket вообще о нём ничего не зная - это 7 лет назад я спокойно делал

Потому что большинство прокси умеют переключаться с HTTP на двусторонний бинарный релей при нарушении протокола.
...
Рейтинг: 0 / 0
Стратегия синхронизации данных между frontEnd и backEnd
    #40003421
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA
Браузер подключается по протоколу TCP на 80 порт сервера и дает немного необычный GET-запрос:

Что в нём необычного? HTTP спецификация ЕМНИП допускает в запросе (и ответе) заголовки, не описанные в ней, а сам GET там абсолютно нормальный.

Вся "поддержка" от браузера состоит в том, что он передаёт JS принятые данные не буферизуя и не пытаясь их парсить.
...
Рейтинг: 0 / 0
Стратегия синхронизации данных между frontEnd и backEnd
    #40003430
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
Вся "поддержка" от браузера состоит в том, что он передаёт JS принятые данные не буферизуя и не пытаясь их парсить.
этого мало?
...
Рейтинг: 0 / 0
Стратегия синхронизации данных между frontEnd и backEnd
    #40003444
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovsky
kealon(Ruslan)
обычный древний IIS который, с отключенным CONNECT, свободно тунелит WebSocket вообще о нём ничего не зная - это 7 лет назад я спокойно делал

Потому что большинство прокси умеют переключаться с HTTP на двусторонний бинарный релей при нарушении протокола.
простой вопрос для HTTPS: какого протокола? TLS? как же он должен это сделать?
...
Рейтинг: 0 / 0
Стратегия синхронизации данных между frontEnd и backEnd
    #40003473
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)
простой вопрос для HTTPS: какого протокола? TLS? как же он должен это сделать?

HTTP.

Тут два варианта (если отбросить CONNECT).
1 Прозрачный прокси, когда трафик перехватывается на пути к серверу. В этом случае после установки соединения прокси ждет HTTP запрос (по plain TCP), а клиент присылает TLS handshake, прокси видит что это не HTTP и просто устанавливает двусторонний релей по plain TCP между сервером и клиентом. Содержимое соединения ему недоступно. (С CONNECT то же самое происходит явной командой клиента.)

2 Обратный прокси, когда клиент соединяется прямо к прокси, а прокси имеет TLS сертификат сервера и обрабатывает запросы клиента от имени сервера. В этом случае клиент и прокси устанавливают TLS соединение. Прокси при этом читает и выполняет индивидуальные сообщения HTTP over TLS. В случае вебсокета клиент выполняет Upgrade в вебсокет, и если прокси не в курсе про вебсокет то после ответа сервера 101 клиент присылает бинарные данные протокола вебсокет, и в этот момент прокси переключается на двусторонний релей по TLS между сервером и клиентом.

В обоих случаях прокси переключается на релей когда обнаруживает что это не протокол HTTP. Просто в первом случае прокси не может видеть трафик, а во втором может.

Так что к моменту когда начинаются данные вебсокета, текущий протокол уже не HTTP.
...
Рейтинг: 0 / 0
Стратегия синхронизации данных между frontEnd и backEnd
    #40003484
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя
этого мало?

Мало, конечно. Для того чтобы написать уже упомянутый IRC клиент на JS в браузере - тот вообще не должен никак ограничивать соединение и поток, предоставляя тот же интерфейс и возможности, что и BSD сокеты. Вот тогда-то меня и разбудите.
...
Рейтинг: 0 / 0
Стратегия синхронизации данных между frontEnd и backEnd
    #40003496
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
упомянутый IRC клиент на JS в браузере -
это что-то наподобие неуловимого Джо?
ещё в самом начале появления ws было известно, что через старое ПО он не везде проходит, но wss ходит везде.
...
Рейтинг: 0 / 0
Стратегия синхронизации данных между frontEnd и backEnd
    #40003500
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovsky,

1. ну и что, это не базовая функция прокси в случае https? с чего ему её блокировать?
2. а вот это уже называется "атака посередине" и к нормальному функционированию прокси отношения не имеет
...
Рейтинг: 0 / 0
Стратегия синхронизации данных между frontEnd и backEnd
    #40003504
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)
2. а вот это уже называется "атака посередине" и к нормальному функционированию прокси отношения не имеет

В режиме обратного прокси с TLS работает весь интернет в наше время.
Слово CDN надеюсь вам знакомо?
...
Рейтинг: 0 / 0
Стратегия синхронизации данных между frontEnd и backEnd
    #40003508
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)
1. ну и что, это не базовая функция прокси в случае https? с чего ему её блокировать?

Да пожалуйста не блокируйте. Только не нужно это называть HTTP. Потому что там его нет.
...
Рейтинг: 0 / 0
Стратегия синхронизации данных между frontEnd и backEnd
    #40003522
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
. Вот тогда-то меня и разбудите.
ради чего? чтоб использовать :
По стандарту, сообщение IRC не может иметь длину больше 510 байтов, из которых собственно на текст приходится никак не больше 499 (по нереалистично завышенной оценке).

Следовательно, отправить в одном сообщении больше 249 русских букв оказывается невозможно.

Ограничение размера сообщений вызывает ещё одну неприятность: при попытке превысить установленный предел сервер обрезает сообщения.

Если срез пройдёт посередине русской буквы (то есть будет передан первый её байт, но отброшен второй), то получившаяся последовательность байтов перестанет, с точки зрения UTF-8, быть правильной строкой.
кода в ws нет ограничения ни в длине , ни в типе передаваемых данных.
так что спи - и не лезь в современную реальность.
...
Рейтинг: 0 / 0
Стратегия синхронизации данных между frontEnd и backEnd
    #40003558
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
skyANA
Браузер подключается по протоколу TCP на 80 порт сервера и дает немного необычный GET-запрос:

Что в нём необычного?

До конца прочитать сообщение не судьба?
...
Рейтинг: 0 / 0
Стратегия синхронизации данных между frontEnd и backEnd
    #40003625
вадя
По стандарту, сообщение IRC не может иметь длину больше 510 байтов, из которых собственно на текст приходится никак не больше 499 (по нереалистично завышенной оценке).

Следовательно, отправить в одном сообщении больше 249 русских букв оказывается невозможно.

с пробелами и ASCii знаками препинания ~300+
...
Рейтинг: 0 / 0
Стратегия синхронизации данных между frontEnd и backEnd
    #40003651
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA
Если сервер поддерживает ВебСокеты
Я не случайно дал ссылку на трижды устаревший RFC2068 (январь 1997 года). Никаких вебсокетов тогда не было даже в проекте, но Upgrade-механизм там уже определён. То, что Websocket задействовал именно этот механизм - вполне логично, для протокола, работающего поверх HTTP.
Но, в любом случае, работа HTTP поверх TCP определёна, а работа WS поверх TCP - нет: начальное подключение делается к HTTP-серверу.
Принципиальная разница в том, что для WS-over-TCP требуется поддержка WS-протокола не только для целевого сервера, но и для промежуточных узлов, а вот WS-over-HTTP - прозрачно работает поверх уже существующей HTTP/1.1-инфраструктуры. И развёртывать его можно "точечно" - только на конечных узлах.
...
Рейтинг: 0 / 0
Стратегия синхронизации данных между frontEnd и backEnd
    #40003652
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovsky
В HTTP невозможно реализовать p2p протокол такой как вебсокет. Подумайте сами почему.
То, что ограниченность вашего ума не позволяет увидеть вполне очевидное решение - исключительно ваши проблемы.
...
Рейтинг: 0 / 0
Стратегия синхронизации данных между frontEnd и backEnd
    #40003653
работа через HTTP подразумевает отправку хедеров серверу, чего ws делает только для рукопожатия, а потом работает сам, просто используя канал, чтобы из бекенда напрямую в JS клиенту передать данные.
...
Рейтинг: 0 / 0
Стратегия синхронизации данных между frontEnd и backEnd
    #40003654
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovsky
1 Прозрачный прокси, когда трафик перехватывается на пути к серверу. В этом случае после установки соединения прокси ждет HTTP запрос (по plain TCP), а клиент присылает TLS handshake, прокси видит что это не HTTP и просто устанавливает двусторонний релей по plain TCP между сервером и клиентом.
Вы, эта, спецификацию почитайте ...

P.S.
Прозрачный прокси - некоторый хак и с HTTP он слабо связан. Это даже если забыть, что прозрачное проксирование не всегда возможно.
...
Рейтинг: 0 / 0
Стратегия синхронизации данных между frontEnd и backEnd
    #40003686
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov
Вы, эта, спецификацию почитайте ...

P.S.
Прозрачный прокси - некоторый хак и с HTTP он слабо связан. Это даже если забыть, что прозрачное проксирование не всегда возможно.

Я там отвечал чуваку почему у него прокси не HTTP проксировал, как он пытался мне рассказать.
По делу есть что сказать?
...
Рейтинг: 0 / 0
Стратегия синхронизации данных между frontEnd и backEnd
    #40003708
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovsky
kealon(Ruslan)
2. а вот это уже называется "атака посередине" и к нормальному функционированию прокси отношения не имеет

В режиме обратного прокси с TLS работает весь интернет в наше время.
Слово CDN надеюсь вам знакомо?
это путанье тёплого с мягким
если у прокси-сервера нету "доверительных отношений" с "интересным мне сервером", то он не может легально лезть в мой трафик
и либо он пропускает в соответствии со стандартом, либо обрезает на основании своих предпочтений - т.е. https просто тупо не работает
...
Рейтинг: 0 / 0
Стратегия синхронизации данных между frontEnd и backEnd
    #40003710
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan),

Ну, то есть понимания как работают CDN нет. ОК)
...
Рейтинг: 0 / 0
Стратегия синхронизации данных между frontEnd и backEnd
    #40003730
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovsky
По делу есть что сказать?
Да. Вы отвечали на совершенно другой вопрос, которого вам никто не задавал.
"Прямое" проксирование TLS (уже давно) делается в рамках RFC2817.
"Прозрачное" и "обратное" проксирование - два совершенно других режима для несколько других задач.
...
Рейтинг: 0 / 0
Стратегия синхронизации данных между frontEnd и backEnd
    #40003754
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovsky
kealon(Ruslan),

Ну, то есть понимания как работают CDN нет. ОК)
ну давайте блесните, расскажите как CDN-сервер закешируют инфу с любого https-сайта:-)
...
Рейтинг: 0 / 0
Стратегия синхронизации данных между frontEnd и backEnd
    #40003842
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov
"Прямое" проксирование TLS (уже давно) делается в рамках RFC2817.

Вот этот RFC это устаревший костыль, который не применяется с тех пор как в SSL появился SNI и ALPN, т.е. оно умерло почти сразу при рождении.
...
Рейтинг: 0 / 0
Стратегия синхронизации данных между frontEnd и backEnd
    #40003847
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)
как CDN-сервер закешируют инфу с любого https-сайта

Я же говорю, нет понимания.
У CDN-сервера нет задачи кешировать любой сайт.
Это просто кластер обратных прокси для набора конкретных доменов, и каждый из этих доменов полностью под контролем CDN (включая SSL сертификаты), пока DNS делегирует обслуживание этих доменов в эту CDN.
...
Рейтинг: 0 / 0
Стратегия синхронизации данных между frontEnd и backEnd
    #40003959
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovsky
Только не нужно это называть HTTP. Потому что там его нет.

Если что-то выглядит как утка, крякает как утка и ходит как утка, то это утка.
Если в протоколе прикладного уровня засветился заголовок, соответствующий спецификации HTTP и обойтись без него нельзя, то это HTTP.
...
Рейтинг: 0 / 0
Стратегия синхронизации данных между frontEnd и backEnd
    #40004068
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovsky
kealon(Ruslan)
как CDN-сервер закешируют инфу с любого https-сайта

Я же говорю, нет понимания.
У CDN-сервера нет задачи кешировать любой сайт.
Это просто кластер обратных прокси для набора конкретных доменов, и каждый из этих доменов полностью под контролем CDN (включая SSL сертификаты), пока DNS делегирует обслуживание этих доменов в эту CDN.
это его основная задача вообще-то.
...
Рейтинг: 0 / 0
Стратегия синхронизации данных между frontEnd и backEnd
    #40004116
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovsky
Вот этот RFC это устаревший костыль, который не применяется с тех пор как в SSL появился SNI и ALPN, т.е. оно умерло почти сразу при рождении.
Опять вы про Ерёму ...
Есть выделенный для SSL (TLS) подключений порт (443 и https-схема) и есть проблема организации виртуального хостинга для https.
А есть проблема переключения с http на https или любой другой (прикладной) протокол.
А у вас люди с конями на Бородинской битве.
...
Рейтинг: 0 / 0
66 сообщений из 66, показаны все 3 страниц
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Стратегия синхронизации данных между frontEnd и backEnd
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]