The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

Для Chrome развивается API для прямых TCP и UDP коммуникаций, opennews (??), 22-Авг-20, (0) [смотреть все]

Сообщения [Сортировка по времени | RSS]


177. "Для Chrome развивается API для прямых TCP и UDP коммуникаций"  +/
Сообщение от rvs2016 (ok), 25-Авг-20, 17:05 
>> Тю. Вообще бесполезная система. Исходящие-то соединения я и через Ajax наваяю.
> Под Ajax подразумевается XHR? Ну наваяй через него банальный чат реального времени
> без долбёжки сервера постоянным опросом

Долбёжка постоянным опросом - это, конечно, нехорошо.

Но я в браузере запускаю:
let eventSource = new EventSource("урл_к_моему_cgi_скрипту");
и после этого браузер держит с моим cgi-скриптом постоянный канал связи и даже переустанавливает его сам, если канал разрывался.
А серверный cgi-скрипт каждые N секунд шлёт в этот канал данные:

Вот пример, в котором серверный cgi-скрипт ежесекундно секунд шлёт в браузер номер пакета и его время, а через 5 пакетов завершает свою работу, закрывая тем самым канал:

Серверный Perl:


foreach my $num (1..5) {
  my $t = time();
  print "data: num = $num, t = $t<BR>\n";
  sleep 1;
};
print "data: <HR>\n\n";

Браузерный JavaScript:


let eventSource = new EventSource("урл_к_моему_cgi_скрипту");

eventSource.onmessage = function(event) {
  console.log(event.data);
  if (а не закрыть ли нам канал?) {
     // а закрыть!
     eventSource.close()
  } else {
     // а не надо! :-)
     // NOOP
  }
}

Браузер-то потом автоматически переоткрывает этот канал повторным запросом к cgi-скрипту, если в браузерном JavaScript не остановить автоматической восстановление канала, когда он уже не нужен:

Это простейший пример - отправка в браузер пакета ежесекундно. А можно ж не ежескундно, а по другим условиям - например, когда пакет сформировался - хоть через час, хоть через сутки, хоть через месяц, год, век.

>> Входящие нужны!
> Зачем? Закладываться на наличие у пользователя белого IP (ещё и не порезанного
> межсетевым экраном провайдера или работодателя) — уже давно безумие.

Вот зачем:

Мне нужно отправить юзеру пакет.
Обычно это в браузерах 30 лет делают так:
Браузер шлёт пакет на сервер, а получатель пакета в другом браузере получает этот пакет с сервера.
Но сервер же может отвалиться. Может отвалиться даже кластер серверов. И когда не останется ни одного доступного сервера-посредника, тогда надо иметь возможность отправить пакет из браузера в браузер напрямую без посредников в виде веб-серверов. А если такая возможность будет, то веб-серверы для межбраузерного обмена информацией будут и не нужны (кроме начальных этапов типа построения в браузерах таблиц/списков других браузеров, готовых участвовать в межбраузерном обмене пакетами).

Ответить | Правка | К родителю #173 | Наверх | Cообщить модератору

179. "Для Chrome развивается API для прямых TCP и UDP коммуникаций"  +/
Сообщение от n80 (?), 25-Авг-20, 18:05 
> А серверный cgi-скрипт каждые N секунд шлёт в этот канал данные

А теперь представим, что клиентов подключено хотя бы 1000. Решение хорошо знакомое, классическое, даже рабочее, но по многим причинам дикое.

А ещё EventSource — довольно бестолковая штука, ИМХО: в дикой природе я его не встречал и сам так нигде и не применил (хотя и были порывы). С одной стороны, требует довольно нового браузера (к счастью, теперь-то IE уже закапывают официально, но сколько лет к этому шли), с другой — всё равно мало что даёт (одно направление, прибитый гвоздями формат сообщений и т.д.). Так что если важны клиенты, используют long polling с GET/POST-запросами, а если можно надеяться на свежий браузер у клиента, давно есть WebSocket'ы, в которых возможностей куда больше при той же нагрузке на сервер и клиент. Только не надо рассказывать про то что это плохо совместимо со столь родными CGI-скриптами, с которыми прожил много лет и не поднимается рука выкинуть, это несерьёзно. Затраченные в прошлом ресурсы не должны быть определяющим аргументом в пользу оставлять/не оставлять. Да, себя иногда тоже на подобном ловлю, но стараюсь пресекать.

> Мне нужно отправить юзеру пакет.
> Обычно это в браузерах 30 лет делают так:

Браузерам в современном понимании «немножко» меньше 30 лет, на минуточку. Не могу не позанудствовать в данном вопросе, пардон.

> Браузер шлёт пакет на сервер, а получатель пакета в другом браузере получает этот пакет с сервера.

Эту задачу WebSocket прекрасно решает. В смысле, уже лет пять (если не восемь, а до этого аналогичное делалось на Flash и тому подобных отвратительных, но работающих технологиях), как для решения такой задачи браузер не шлёт пакет на сервер. Устанавливает соединение один раз при заходе на сайт и дальше через него может получать пакеты от сервера в любой момент (пока соединение не отвалится или сервер, но это уж с каждым может случиться).

> И когда не останется ни одного доступного сервера-посредника, тогда надо иметь возможность отправить пакет из браузера в браузер напрямую без посредников в виде веб-серверов. А если такая возможность будет, то веб-серверы для межбраузерного обмена информацией

Так ведь такая возможность давно есть. Локальные браузер-совместимые peer-to-peer программы (типа IPFS или Mastodon) уже давно существуют, в сами браузеры WebRTC тоже завезли уже довольно давно. Т.е. разные возможности есть, организовать транспорт — не проблема. Проблемы возникают куда более интересные, особенно с активным содержимым (скриптами и тому подобным), ну и банально с тем что контент нужно где-то хранить, а его очень много.

Ответить | Правка | Наверх | Cообщить модератору

183. "Для Chrome развивается API для прямых TCP и UDP коммуникаций"  +/
Сообщение от rvs2016 (ok), 25-Авг-20, 19:42 
> А теперь представим, что клиентов подключено хотя бы 1000.
> Решение хорошо знакомое, классическое, даже рабочее,
> но по многим причинам дикое.

Согласен. Для большей нагрузки решения нужны более элегантные, чем простой, топорный EventSource.

> браузер у клиента, давно есть WebSocket'ы,
> в которых возможностей куда больше
> при той же нагрузке на сервер и клиент.

Вебсокеты - технология какая-то странная с привязкой к http, если даже не вообще к https вроде - точнее не помню: успел не применить их у себя нигде, а теперь благодаря сабжу их время/эпоха подходит к концу. А если мне надо отправить запрос на 110-й порт моего_почтового_сервера? Или на любой другой порт, если меня на другом конце ждёт моя программа-сервер, работающая хоть по телнету и обрабатывающая мои команды на моём спец-языке? Ну это я всё клоню к тому, что нужна просто простая штука для просто подключений на указанный хост по указанному порту без всяких странных наворотов. Ну типа как просто берёшь, например, tcpcat и "горя не знаешь":


pkg info tcpcat
...
Description    :
From the tcpcat README:

Tcpcat is a simple program that is like `cat' but it works over TCP streams
to allow you to cat from one host to another.

The host common way to use this program whould be something like this:
on host a: $ tcpcat -l 93255 | gzip -dc | tar xvf -
on host b: $ tcpcat -h hosta:93255  file.tar.gz

Another good use for this program is debugging network stuff. When debugging
a newtork client or server you can pipe the output of tcpcat to a hex dump
(I recomend xxd which comes with vim). Also it can act as a crude telnet server
when invoded with --listen, --input, and --output, this mode is quite useful
for network program debugging as well.

> Браузерам в современном понимании «немножко» меньше 30 лет,
> на минуточку. Не могу не позанудствовать в данном вопросе, пардон.

Конечно-конечно! 30 - это сильно приблизительно! С небольшой погрешностью лет в 7. :-) (для браузеров в современном понимании, когда во 2-й половине 90-х уже пошли Нетскейпы после Мозаик да Арахн :-) )

> Так ведь такая возможность давно есть.
> Локальные браузер-совместимые peer-to-peer программы

Тут "прикол" в том, что требуется работа с пользователями, которые даже слова "браузер" не знают (хотя пользуются им), а не только слова типа "Локальные браузер-совместимые peer-to-peer программы". :-)
Слушаешь, бывает, юзера по телефону. Он говорит - запускаю Интернет!
И думаешь - какой ещё интернет он там запускает, если у него сеть давно настроена? Переподключается что ли к провайдеру?
Оказывается, что интернетом юзер называет браузер.
Поэтому требуется такие задачки решать в среде, в которой люди, уж извините, ни бум-бум в том, что такое компьютер и программы, которые им нынче теперь называют: "устройство" вместо "компьютер", "приложения" вместо "программы". И так далее.

> в сами браузеры WebRTC тоже завезли уже довольно давно

Попытался я, было, в своё время возрадоваться появлению WebRTC. Но какой-то он мутный. Это не простые прямые соединения, а через кучу каких-то странных предварительных настроек. Этот WebRTC со своей не простой системой установки связи между браузерами напоминает мне старую историю из тех же 90-х, когда программисты ("до изобретения Delphi") для создания окна в Windows читали страниц пять толстой книги по программированию в ней. :-)

Вот так и WebRTC. Хочу открыть исходящее соединение по адресу хост:порт. Ну сделайте простую функцию с этой парой аргументов (хост, порт) ну и возможно с назначением callback и т.п., если что, да и всё. Так нет же. Там нужны ещё сервера сигнальные и TURN.

И объясняют всю эту сложность в WebRTC - необходимостью гарантированного пробивания NAT.

А если мне не надо пробивать NAT и оба браузера находятся в одной локальной сети, даже не подключенной к интернету? Браузеру_А надо подключиться к браузеру_Б на порт_Б: взять бы просто да подключиться, если я точно знаю (а это я программно решу сам), что браузер_Б уже слушает порт_Б. Так нет же - иди бери бубен, и танцуй с ним вокруг сигнальных и TURN-серверов. :-)

Ответить | Правка | Наверх | Cообщить модератору

185. "Для Chrome развивается API для прямых TCP и UDP коммуникаций"  +/
Сообщение от n80 (?), 25-Авг-20, 20:59 
>> А теперь представим, что клиентов подключено хотя бы 1000.
>> Решение хорошо знакомое, классическое, даже рабочее, но по многим причинам дикое.
> Согласен. Для большей нагрузки решения нужны более элегантные, чем простой, топорный EventSource.

Гм, аргумент с нагрузкой относился к CGI, а не к EventSource (который сам по себе имеет весьма малые накладные расходы). Мне это показалось очевидным, ну да ладно.

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

Да, с привязкой к HTTP(S) (HTTP поверх SSL/TLS всё-таки не стоит считать отдельным протоколом), но в контексте браузера это не очень-то большая проблема. На самом деле эта привязка очень мало мешает (в т.ч. потому что клиентскую сторону на JS всё равно писать придётся, а серверную можно обернуть в вебсокеты, готовых решений полно). ИМХО, существенно она мешает только там, где не то что HTTP(S) не очень-то подходит, а и вообще TCP (так что начинаются всякие SCTP или, напротив, Enet).

> а теперь благодаря сабжу их время/эпоха подходит к концу.

Хе-хе, сабж если когда-нибудь и внедрят, то очень нескоро, особенно с учётом армии пользователей с мобильных устройств, которые никогда уже не обновятся. Некоторые и на десктопе предпочитают сидеть либо на неподдерживаемых версиях браузера (опасные люди, практически вредители, ибо ловят эксплоиты, а потом другим жизнь портят), либо на особо порезанных (не от хорошей жизни), где вся подобная функциональность зарезана. Тут и про вебсокеты-то до сих пор лишний раз приходится подумать, внедрять или опять извернуться и обойтись без него, а уж это — дожить бы.

> А если мне надо отправить запрос на 110-й порт моего_почтового_сервера?

Оффтоп, но как же у меня припекает от пользователей POP3: вот вообще ничем он не лучше IMAP4, но всё равно находятся упёртые странные пользователи, которые будут страдать, но продолжать заставлять меня держать лишний сервис на сервере, да загаживать логи своим опросом, не говоря уж про прочие неудобства («пошли мне это письмо ещё раз, а то оно на домашнем компе забралось»). Понимаю, что просто пример, но аргх.

> Или на любой другой порт, если меня на другом конце ждёт моя программа-сервер, работающая хоть по телнету и обрабатывающая мои команды на моём спец-языке?

ИМХО, лучше всё-таки с такой программой-сервером общаться не через браузер. И так у браузера слишком много функций и это трагично.

> Ну это я всё клоню к тому, что нужна просто простая штука для просто подключений на указанный хост по указанному порту без всяких странных наворотов.

Такая штука упростит жизнь нескольких разработчиков (хочется сказать каких, ну ладно), но сильно испортит жизнь остальным, т.к. открывает большой просто для злоупотреблений. Тут и так умудряются всякие XSS проворачивать, а с такой штукой (надо быть честным с собой и не верить в то что пользователи будут умные и будут раздавать права только на нужное) открываются невообразимые возможности делать ботнеты на ровном месте. А если вводить аналоги same origin policy и CORS, штука будет довольно бесполезная (и всё равно будут возможности злоупотребления).

> Ну типа как просто берёшь, например, tcpcat и "горя не знаешь"

Да-да, netcat, socat и т.д. Это всё прекрасно в локальной сети (сам часто пользуюсь), но в дикой природе кроме горя ничего так и не познать.

> Конечно-конечно! 30 - это сильно приблизительно! С небольшой погрешностью лет в 7.
> :-) (для браузеров в современном понимании, когда во 2-й половине 90-х
> уже пошли Нетскейпы после Мозаик да Арахн :-) )

Да, я именно про конец 90-х (а то и начало 2000-х), а это всё-таки совсем не 30 лет.

> Оказывается, что интернетом юзер называет браузер.
> Поэтому требуется такие задачки решать в среде, в которой люди, уж извините,
> ни бум-бум в том, что такое компьютер и программы, которые им
> нынче теперь называют: "устройство" вместо "компьютер", "приложения" вместо "программы".
> И так далее.

Вот именно из-за необходимости ориентироваться на таких пользователей, браузерные (да и вообще сетевые) технологии и стали такими, какие есть. Они (технологии) могут выглядеть жутко, дико, непонятно для разбирающегося на низком уровне, но это результат тяжёлого труда по поиску компромиссов.

> Вот так и WebRTC. Хочу открыть исходящее соединение по адресу хост:порт. Ну
> сделайте простую функцию с этой парой аргументов (хост, порт) ну и
> возможно с назначением callback и т.п., если что, да и всё.

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

> Так нет же. Там нужны ещё сервера сигнальные и TURN. [...]
> И объясняют всю эту сложность в WebRTC - необходимостью гарантированного пробивания NAT.

И абсолютно правильно объясняют. В современном мире (опять, хех) даже если какой-то провайдер вдруг даёт белый IP, по умолчанию часто на него нельзя подключиться даже с хоста из той же подсети (!). А всё почему? Потому что «требуется такие задачки решать в среде, в которой люди, уж извините, ни бум-бум», отсюда и умолчания соответствующие.

> А если мне не надо пробивать NAT и оба браузера находятся в одной локальной сети, даже не подключенной к интернету?

То это настолько специфичное исключение, что админ этой корпоративной/институтской сети может обойти (не обязательно ногами) оба этих ПК и установить и настроить там не только браузер, но и другой нужный софт.

---

На самом деле, всё ещё намного хуже: в современном мире приходится учитывать не только то что проблемных пользователей и порезанных окружений большинство, так ещё и что программисты по большей части криворуки и не думают о последствиях (а некоторые ещё и при этом очень великого о себе мнения, ведь они не орган собачий, а что-то там писали на чистом WinAPI, ууу), поэтому массовые технологии приходится, гм, делать очень ограниченными и дуракоустойчивыми (как следствие, довольно усложнёнными). Это печально, но приходится смириться с тем что усидеть на всех стульях (чтобы решение было в 5 строчек, и работало устойчиво, и нужды 99% пользователей покрывало) не выйдет и искать компромиссы, выжимая 80% пользы с помощью 20% усилий, а не наоборот.

Ответить | Правка | Наверх | Cообщить модератору

201. "Для Chrome развивается API для прямых TCP и UDP коммуникаций"  +/
Сообщение от rvs2016 (ok), 26-Авг-20, 15:44 
> Гм, аргумент с нагрузкой относился к CGI, а не к EventSource (который
> сам по себе имеет весьма малые накладные расходы). Мне это показалось
> очевидным, ну да ладно.

Ну правильно ж. EventSource пусть себе расходы накладные в браузере несёт весьма малые. Но если этих EventSoure начнёт одновременно набираться тысячами для долбёжки cgi-скрипта, то у машины с веб-сервером, на котором этот скрипт трудится, может появиться напрряг - ну смотря как систему настраивать, конечно.

>> а теперь благодаря сабжу их время/эпоха подходит к концу.
> Хе-хе, сабж если когда-нибудь и внедрят, то очень нескоро, особенно с учётом
> армии пользователей с мобильных устройств, которые никогда уже не обновятся.

Есть такая идея, что мобильные, как раз быстрее обновляют свои железки, чем десктопные, т.к. мобилы нынче делают так, что не успел повернуться, а уже "устройство исчерпало память, будет работать плохо, медленно, прегадко и т.д." - после этого простые смертные (которые ни разу не программисты) просто выбрасывают свои мобилы и идут покупать новые.

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

>> А если мне надо отправить запрос на 110-й порт моего_почтового_сервера?
> Оффтоп, но как же у меня припекает от пользователей POP3: вот вообще
> ничем он не лучше IMAP4, но всё равно находятся упёртые странные
> пользователи, которые будут страдать, но продолжать заставлять меня держать лишний сервис
> на сервере, да загаживать логи своим опросом, не говоря уж про
> прочие неудобства («пошли мне это письмо ещё раз, а то оно
> на домашнем компе забралось»). Понимаю, что просто пример, но аргх.

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

>> Или на любой другой порт, если меня на другом конце ждёт моя программа-сервер, работающая хоть по телнету и обрабатывающая мои команды на моём спец-языке?
> ИМХО, лучше всё-таки с такой программой-сервером общаться не через браузер. И так
> у браузера слишком много функций и это трагично.

Если задача стоит так, что общаться должен только браузер (юзеру ж не скажешь - установи себе программу какую-то), то получается, что надо именно браузер заставлять коннектиться к серверу.

>> Ну это я всё клоню к тому, что нужна просто простая штука для просто подключений на указанный хост по указанному порту без всяких странных наворотов.
> невообразимые возможности делать ботнеты на ровном месте. А если вводить аналоги
> same origin policy и CORS, штука будет довольно бесполезная (и всё
> равно будут возможности злоупотребления).

Да-да. Я тоже думал про то, что эти фичи упростят жизнь злоумышленникам. И тоже думал про то, что нужны ограничители, которые регулирует не юзер (которые макисмальные разрешения навыдаёт), а такие, которые помогают коннкетиться только к "своему сайту/домену" - для многих задач этого достаточно. Ну, например, чат без сервера. Ну не будут же браузеры участников чата коннкетиться куда попало, если им сообщения надо гонять только в своём чате.

> Да, я именно про конец 90-х (а то и начало 2000-х), а
> это всё-таки совсем не 30 лет.

Да это я просто грубо с плеча рубанул - получилось аж 30 лет. Ну по сильно грубому прикиду и без апроксимаций. :-)

>> А если мне не надо пробивать NAT и оба браузера находятся в одной локальной сети, даже не подключенной к интернету?
> То это настолько специфичное исключение, что админ этой корпоративной/институтской сети
> может обойти (не обязательно ногами) оба этих ПК и установить и
> настроить там не только браузер, но и другой нужный софт.

Ну браузеры внутри одной локалки - это сильно упрощённый пример.
А я ж могу точно знать, что у юзера, например, в Уфе браузер на белом IP и к нему можно отправить запрос, например, из Магадана. Я же точно знаю, что NAT между обоими браузерами отсутствует. Ну откуда я это знаю - это "по условиям задачи". Но не смотря на это всё-равно получается так: "мы вам упростили жизнь и теперь вам самим не надо пробивать NAT" (даже если никаким NAT'ом по дороге и не пахнет). Да это ж какая-то медвежья услуга получилась: NAT пробивать не надо, а всё-равно фичи пробивания в нагрузку бери, пожалуйста, и не сетуй. :-)

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

Эх, да... Мир сложен...
Работает, бывает, хороший сайт и через некоторое время работать нормально перестаёт - после прихода на работу в этот сайт вебмастера, который начальству говорит: мой предшественник - профан и мне теперь придётся у вас тут всё перенастроить по другому. Результат - сайт нормально работать перестаёт. Да и не только сайт и не только компьютеры. Во всех отраслях такое бывает... Беда прям...

Ответить | Правка | Наверх | Cообщить модератору

203. "Для Chrome развивается API для прямых TCP и UDP коммуникаций"  +/
Сообщение от n80 (?), 29-Авг-20, 19:07 
> > Гм, аргумент с нагрузкой относился к CGI, а не к EventSource (который
> > сам по себе имеет весьма малые накладные расходы). Мне это показалось
> > очевидным, ну да ладно.
> Ну правильно ж. EventSource пусть себе расходы накладные в браузере несёт весьма малые. Но если этих EventSource начнёт одновременно набираться тысячами для долбёжки cgi-скрипта, то у машины с веб-сервером, на котором этот скрипт трудится, может появиться напрряг - ну смотря как систему настраивать, конечно.

Всё сильнее ощущение, что меня (сравнительно тонко) троллят. Ведь очевидно же, что накладные расходы клиента здесь вообще не являются тем, о чём имеет смысл беспокоиться, да и вообще: клиентов тысячи, а сервер на них один. Равно как и очевидно, что CGI не годится для долгоживущих соединений чуть более, чем совсем. Да и вообще ни для чего (кроме махрового legacy и некачественных сайтов, особенно внутренних) не годится, как ни настраивай систему. Можно сколько угодно оптимизировать fork+exec (vfork+exec, spawn, не важно), подгонять размер стека потоков ядра, подстраивать планировщик и всё равно это будет много хуже (в плане отношений полезной работы к потребляемым ресурсам как сервера, так и разработчика/поддержки), чем сразу делать по уму.

Но да, CGI — одна из «святых коров» закостенелых админов (не старых, не опытных, а именно закостенелых, это не от возраста зависит), не желающих даже смотреть на что-либо новое, ведь позволяет писать серверную часть абы как и долго не замечать (читай, игнорировать) проблемы разной степени серьёзности (вплоть до чего-нибудь типа повреждения кучи).

А если под «cgi-скриптом» подразумевалось вообще любое серверное ПО для генерации динамики (а не конкретно используемые через CGI программы) — лучше так всё-таки не вводить в заблуждение, у термина есть вполне конкретное значение.

> Есть такая идея, что мобильные, как раз быстрее обновляют свои железки, чем десктопные, т.к. мобилы нынче делают так, что не успел повернуться, а уже "устройство исчерпало память, будет работать плохо, медленно, прегадко и т.д." - после этого простые смертные (которые ни разу не программисты) просто выбрасывают свои мобилы и идут покупать новые.
>
> Конечно, какая-то часть населения железяки свои не обновляет. Но это во многом - не платёжеспособная часть населения, которая многим сайтам, увы, всё-равно бесполезна.

Идея интересная, но дело-то не в железках, а в софте. И если на десктопе вроде как программы так или иначе обновляются регулярно (хотя ещё не так давно на это рассчитывать не приходилось), то лепить новые мобильные устройства со старым вшитым софтом (и не выпускать обновления) производители ох как любят. Это не говоря уж про изначально урезанные версии софта по сравнению с исходными версиями. Отдельного гнева, кстати, заслуживает то что в новых версиях мобильных ОС из-за засилья низкосортных кодеров (ну и по коммерческим причинам, конечно) всё сильнее продавливают использование push-уведомлений (в т.ч. в браузере, с необходимостью использовать соответствующий API) вместо поддержания долгих соединений самим приложением. Доходит до того, что очень многие разработчики свято верят, что если программа (какой-нибудь XMPP или IMAP клиент, например) для получения данных с сервера без задержки не использует push-уведомления, то обязательно должна выжирать батарею на глазах (в итоге в свежих версиях ОС уже и нет возможности без этого обойтись,
а балбесы и рады). Вот это случай, когда действительно программистов ограничили не по делу, хотя умом и понятно, что «рыночек порешал».

> Ну "для сэбэ трошки" POP3 при грамотной настройке работает нормально. И проблем не возникает, если грамотно настроить маршрутизацию почты так, чтоб она была доступна везде в нужных местах. Но это, повторю, верно "для сэбэ трошки" - для людей, умеющих работать грамотно - програмимстов, сисадминов и т.п. А для смертных в промышленных масштабах про POP3 сказать ничего не могу - не работал с почтой масштабно аки крупный почтовый провайдер.

Ну начинается. Вкратце — нет, не работает. Можно сколько угодно обкладывать старый протокол костылями (там маршрутизацию подстроить, там плюнуть, тут подпереть, опросом сервер задолбить, опять же), но это называется «закат Солнца вручную». Т.е. вместо того чтобы сразу взять нормальный протокол (который тоже не сказать, что сильно молодой, между прочим) и получить массу полезных фич бесплатно, начинается накостыливание ради, вероятно, поддержки чувства собственной важности.
В итоге полученный франкенштейн и будет заведомо хуже работать (не иметь ряда полезных возможностей, создавать лишнюю активность на сервере), и ресурсов будет тратиться (как на настройку/поддержку, так и сервером и клиентами на работу) куда больше. Причём, тут не надо никаких масштабов крупного провайдера. Даже для переписки двух человек важно иметь нулевую (за вычетом собственно времени перекачки по каналам связи) задержку получения новых сообщений (да здравствует достающаяся по сути бесплатно возможность общаться в режиме чата, никак не ломающая возможность общения и в более традиционном формате) и возможность иметь с любого устройства доступ к своим перепискам, заботливо рассортированным по папкам (причём, и отправленные письма, и ответы на них хранятся вместе и отображаются цепочками, ровно как тут на форуме, без всяких нелепых костылей, типа Bcc на себя). Попытка изобразить эту функциональность на базе POP3 обречена на провал, хотя формально часть (но только часть) возможностей и можно кое-как накостылить дополнительными телодвижениями (теша себя тем что, чай, не простой смертный, а ого-го какой нормальный пользователь).

Нет ни одной разумной причины использовать POP3 вместо IMAP4 (даже миф про разницу в потреблении трафика оказался мифом), ровно так же как и нет ни одной разумной причины использовать EventStream вместо WebSocket. Есть разве что одна полуразумная причина «у меня так уже было настроено и работает, мне не нужны фичи и я очень не хочу ничего сломать», но это применимо только к машинно-машинному взаимодействию, а для живых пользователей всё-таки плохо подходит (рано или поздно вносить изменения приходится и нужно заранее представлять их цену в случае одной реализации и другой). И уж точно не нужно тащить это барахло в новые инсталляции. Да, очень часто новые технологии хуже старых (в чём-то или, нередко, вообще во всём), регулярно такое вижу, но эти примеры — редкий случай, когда это точно не так, но находится целая армия упирающихся тупо ради своих, сугубо субъективных причин.

И вот это явление, называемое «закат Солнца вручную» много где проникает. И полбеды что люди своё время тратят на такую кочергу, так ещё и другим частенько этим создают неудобства.

> Если задача стоит так, что общаться должен только браузер (юзеру ж не скажешь - установи себе программу какую-то), то получается, что надо именно браузер заставлять коннектиться к серверу.

Как это не скажешь (если только это не восточный пользователь, у которого все сайты через мини-приложения внутри одного комбайна под названием gosuslugi^W WeChat), столько лет ставили программы и продолжают ставить (хотя и всё менее охотно). Успех ряда проприетарных программ (неэтично их лишний раз называть, но мы понимаем о каких программах для обмена сообщениями и файлами, просмотра карт и, например, удалённого доступа к рабочему столу может идти речь) ясно показывает, что если оно того стоит и сделано по уму — пользователь ещё как поставит. Как тут не вспомнить слова (цитирую по памяти, так что не совсем дословно, но суть должна была сохраниться) из полурекламной статьи одного хостера: «не стоит недооценивать пользователей; по нашему опыту, нет таких скриптов, с установкой которых на сервер не разобралась бы очередная instagram-дива ради накрутки +30% like'ов на своих фотографиях».

> Да-да. Я тоже думал про то, что эти фичи упростят жизнь злоумышленникам. И тоже думал про то, что нужны ограничители, которые регулирует не юзер (которые максимальные разрешения навыдаёт), а такие, которые помогают коннектиться только к "своему сайту/домену" - для многих задач этого достаточно. Ну, например, чат без сервера. Ну не будут же браузеры участников чата коннкетиться куда попало, если им сообщения надо гонять только в своём чате.

А совсем без сервера не получится в любом случае, проблему bootstrap'а никто не отменял. Т.е. либо придётся на старте вбивать адреса руками (опять закатываем вручную?), либо пользоваться своим сервером, либо общественным (к этому в т.ч. относится использование DNS, например). Причём, «либо» тут в смысле неисключающего или. А если полагаться на общественную инфраструктуру, то использование общедоступных STUN/TURN серверов для начального соединения не сильно отличается от того чтобы полагаться на работу DNS. Это не говоря уж про такие занятные штуки, как mDNS.

> Ну браузеры внутри одной локалки - это сильно упрощённый пример.

Он не столько упрощённый, сколько ИМХО самый распространённый пример такого стечения обстоятельств.

> А я ж могу точно знать, что у юзера, например, в Уфе браузер на белом IP и к нему можно отправить запрос, например, из Магадана. Я же точно знаю, что NAT между обоими браузерами отсутствует. Ну откуда я это знаю - это "по условиям задачи".

Это замечательно, верю, но теперь нужно не забыть прикинуть, кому нужны именно так построенные задачи. Даже если таких случаев в окружении много (и потому кажется, что их вообще много), они составляют невесомые доли процента от общего числа пользователей. И если дать возможность такие задачи решать так, как этого хочется отдельным, гм, специфичным разработчикам, хорошо жить станет долям процентов, зато остальным участникам процесса (т.е. многим девяткам) станет хуже. Т.е. повторюсь, когда речь идёт о массовых решениях, нужно думать не только о возможной пользе для лично себя и ближайшего окружения, но и потенциальных проблемах для остальных.

> Но не смотря на это всё-равно получается так: "мы вам упростили жизнь и теперь вам самим не надо пробивать NAT" (даже если никаким NAT'ом по дороге и не пахнет). Да это ж какая-то медвежья услуга получилась: NAT пробивать не надо, а всё-равно фичи пробивания в нагрузку бери, пожалуйста, и не сетуй. :-)

Опять же, ИМХО, эти фичи достаются бесплатно. Т.е. когда они не нужны, они ничего плохого и не делают, а когда нужны (и тут слишком много девяток) — просто работают. Да, есть некоторое неприятное ощущение от того что нужно или иметь свой сервер сигнализации, или пользоваться любыми общественными (а их более чем достаточно, чтобы совсем уж без связи не остаться, не говоря уж про возможность в этом случае поднять свой на любом из хостов участников, раз они все по условию задачи без NAT), но сейчас (в мире отсутствия полного глобального запрета на торренты и прочий P2P) наличие общедоступного STUN/TURN сервера является чем-то столь же само собой разумеющимся, как и наличие работающего DNS. Так что, ИМХО, не тот случай, когда нужно воротить нос и из-за заморачивания по поводу мелкой потенциальной проблемы устраивать реальную и большую (ударение и так, и так).

> Работает, бывает, хороший сайт и через некоторое время работать нормально перестаёт - после прихода на работу в этот сайт вебмастера, который начальству говорит: мой предшественник - профан и мне теперь придётся у вас тут всё перенастроить по другому. Результат - сайт нормально работать перестаёт. Да и не только сайт и не только компьютеры.

Отож, классика жанра, к сожалению. Но, справедливости ради, у таких историй есть, как минимум, две стороны. Одна (вина которой чаще всего очевидна) — пришедший профан, который полез вносить изменения, не удостоверившись в понимании что, как и _зачем_ было сделано, в наличии бекапов (и того что восстановление из них работает) и, собственно, плана постепенных изменений (включающего в т.ч. некоторое понимание того, что делать, если в какой-то момент поведение системы идёт не по плану). Вторая — предыдущий админ, который мог неограниченно копить технический долг (не устанавливать обновления, втыкать всё новые и новые костыли, регулярно вручную «подшаманивать» отваливающиеся куски системы, борясь вручную с симптомами вместо исправления проблем, настраивать что-то без понимания копипастой и т.д.; и всё это документировать, в лучшем случае, только в унесённой с собой тетрадке, а то и вообще в голове, да и то через раз). Пока такой админ регулярно занимается своим «закатом Солнца вручную», снаружи может быть обманчивая иллюзия идиллии (которая и откладывается в голове у начальства, так что вина этой стороны может быть крайне неочевидной), но настроенная таким образом система имеет свойство быстро и, что важно, неожиданно (через недели или месяцы после ухода шамана) ломаться сама, даже без всяких изменений. А кому не повезёт в этот момент оказаться рядом, на того все шишки и посыпятся, даже если он и бекапами озаботился и разобраться пытался, прежде чем менять. А в силу отсутствия документации и ряда чудом работавших решений (которые даже сам предыдущий админ не понимает как работали) такие системы очень трудно чинятся и, тем более, переносятся на новую платформу. Клубок очень легко запутывается и очень трудно распутывается, скажем так. Бывает, впрочем, и третья сторона, которая наблюдает со стороны и, в силу устройства своей психики (это вообще довольно стандартный защитный механизм у мозга, просто в разной мере проявляется), легко забывает о прошлых проблемах и столь же легко раздувает нынешние, в итоге текущий админ постоянно (до самого его ухода в более здоровое место) поливается отборными помоями и по делу, и без дела, но когда он становится бывшим админом, то новому получателю помоев постоянно упоминается как пример идеала. Это уже, конечно, не из технической области фактор, но тоже важный для полноценного рассмотрения вопроса. Как говорится, плавали, знаем.

Ответить | Правка | Наверх | Cообщить модератору

205. "Для Chrome развивается API для прямых TCP и UDP коммуникаций"  +1 +/
Сообщение от rvs2016 (ok), 04-Сен-20, 18:03 
> CGI не годится для долгоживущих
> соединений чуть более, чем совсем.

Что годится для соединений долгоживущих?

> CGI — одна из «святых коров» закостенелых админов (не старых,
> не опытных, а именно закостенелых, это не от возраста зависит), не
> желающих даже смотреть на что-либо новое, ведь позволяет писать серверную часть
> абы как и долго не замечать (читай, игнорировать) проблемы разной степени
> серьёзности (вплоть до чего-нибудь типа повреждения кучи).
> А если под «cgi-скриптом» подразумевалось
> вообще любое серверное ПО для генерации
> динамики (а не конкретно используемые через CGI программы)

Чем на сервере генерируют динамику незакостенелые админы?

>> Ну "для сэбэ трошки" POP3 при грамотной настройке работает
>> нормально. И проблем не возникает, если грамотно настроить
>> маршрутизацию почты так, чтоб она была доступна везде в
>> нужных местах. Но это, повторю, верно "для сэбэ трошки"
>> - для людей, умеющих работать грамотно - програмимстов,
>> сисадминов и т.п. А для смертных в промышленных масштабах
>> про POP3 сказать ничего не могу - не работал с почтой
>> масштабно аки крупный почтовый провайдер.
> ради, вероятно, поддержки чувства собственной важности.

Возможно, что где-то такие конфигурации используются по причине поддержки этого чувства.
Но мой случай более прост:
Мне надо сделать, чтоб система работала.
Я так сделал.
Других задач у меня нет. :-)

> Нет ни одной разумной причины использовать
> POP3 вместо IMAP4 (даже миф про разницу в
> потреблении трафика оказался мифом), ровно
> так же как и нет ни одной разумной причины
> использовать EventStream вместо WebSocket.

Для настройки WebSocket в браузере хорошие описания по интернетам существуют.

А для настройки серверной стороны хороших описаний, показывающих простоту настройки, нет.

Вот загрузилась, например, в браузер страница с веб-сервера Апач.
Из страницы с помощью WebSocket отправляется по некому адресу запрос на установку соединения.
Пока всё хорошо, т.к. действия из пары предыдущих предложений выполнить очень легко.

Дальше начинается что-то мало понятное:

Кто на сервере должен принять запрос на установку соединения WebSocket?
Ну первоначально-то запрос может принять и Апач: ну, например, Апач принял запрос, отдал его обработку моему перл-скрипту, который выдал правильные заголовки, включающие Upgrade и т.п.
А дальше что да как?
В обычной системе браузер отсылает запросы на веб-сервер отдельными подключениями и веб-сервер даёт на них ответы, после чего соединение сразу же закрывается.
А когда соединение из браузера по протоколу WebSocket установлено и является продолжительным, то кто на сервере может это соединение держать и работать с ним? Тут уже хорошие примеры по интернетам на глаза не попадаются.
Кто-нибудь может по шагам описать простую и понятную схему настройки серверной части для работы с WebSocket?

Ответить | Правка | Наверх | Cообщить модератору

206. "Для Chrome развивается API для прямых TCP и UDP коммуникаций"  +/
Сообщение от rvs2016 (ok), 04-Сен-20, 19:14 
> Кто-нибудь может по шагам описать простую и понятную
> схему настройки серверной части для работы с WebSocket?

По этой части моего доклада сообщаю:

В Апач можно из браузера WebSocket'ное соединение и не отправлять.
Оно-то и так понятно, что Апач не обязателен. Но просто по привычке хотелось сперва замутить серверную часть с его применением.
Многие советы в интернетах советуют запускать сервер на nodejs. Но "не нравится мне этот гусь". :-)
Запустил сервер простеньким перловым скриптом с использованием этого:

use AnyEvent::Socket;
use AnyEvent::Handle;

use Protocol::WebSocket::Handshake::Server;
use Protocol::WebSocket::Frame;

Помогли немного получше осознать "происходящее" примеры со страницы Прагматик перла аж за 2015-й год:

http://pragmaticperl.com/issues/26/pragmaticperl-26-%D1...

В 15-то году я эту статью читал, но тогда дальше чтения дело не пошло. А нынче руки дошли ещё и до запуска примеров у себя.

В примерах там будьте внимательны. Если клиента и сервера запускаете на разных хостах, то в клиенте замените ws://localhost:3000 на ws://хост_вашего_websocket_сервера:3000
А то я и сам на этом сперва попался: сервер работал нормально и локально я к нему телнетом на 3000-й порт подключался успешно, а Файрфоксом со своей рабочей станции подключение к этому не локальному серверу не срабатывало (ибо он же не на моей станции подключения ожидал), пока в клиенте не исправил адрес вебсокетного сервера. А то уже даже на браузер грешить почти начиал уж. :-)

Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру