Имя: Пароль:
IT
 
Задачка по Java
🠗 (Волшебник 26.09.2019 20:47)
,
0 qwerty
 
21.09.19
15:04
Так как тут регулярно появляются треды про уйти в Ява из 1С, то для тестирования Ваших способностей для перехода на эту технологию предлагаю решить следующую студенческую лабораторку:

Дано: на стороне сервера запускается очень долгий процесс, который длится несколько минут.

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

Конкретные вопросы на знание темы:
- Какую именно клиентскую (браузер) технологию нужно выбрать, чтобы получать фидбек от сервера и не иметь проблем с сертификатами ssl и брандмаурами.

- Сколько endpoint должен в правильном решении предоставлять Java сервер?

- Должны ли на сервере использовться треды (потоки)? какие и в каком количестве? Где и как они должны запускаться?  

- Каким образом эти потоки должны взаимодействовать друг с другом? По какой технологии? Ну или проще: какой паттерн имлементирует это взаимодействие?

- Должен ли клиент получить от сервера дополнительную информацию, чтобы потом узнавать статус прогресса? Если да, то какую? Почему?

- Как реализовать отмену операции на сервере?
1 CrushBy
 
21.09.19
15:14
Жесть конечно, а не лабораторка. Особенно доставляют вопросы типа "Должны ли". Сразу хочется спросить : кому должны ?

И какое отношение первый вопрос имеет к Java вообще непонятно. Или браузеры уже научились Java вместо JavaScript'а выполнять ?
2 qwerty
 
21.09.19
15:19
(1) э... Если тебя называют Ява программистом, то изволь и бек, и фронт уметь. Это подразумевается автоматом.

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

Зы. Зы. Замените "должны ли" на "нужно ли"..
3 qwerty
 
21.09.19
15:23
(1) - а клиент (браузер) и сервер будут как бы не взаимодействовать друг с другом?
4 Лефмихалыч
 
21.09.19
15:26
(0) а вопрос-то твой в чем именно конкретно? Цель ветки какая?
5 qwerty
 
21.09.19
15:28
(1) и да, я упустил самое главное - на этом ловят всех июней на собеседованиях:

Почему решение с периодическим опросом сервера (эй, дай мне свой статус, сколько процентов у тебя там выполнено) будет выкинуто Вашим заказчиком как не предназначенное для продакшена?
6 CrushBy
 
21.09.19
16:13
(2) Действительно. Это какие то дурачки придумали разделение на frontend и backend developer. А в жизни все должны быть fullstack developer. А javascript - это просто разновидность java. Ясно. Понятно.
7 qwerty
 
21.09.19
16:25
(6) эта задача тривиальна с точки зрения фронта. Нетривиальна она с точки зрения бекенда.
8 ДенисЧ
 
21.09.19
16:30
(7) А что в беке нетривиального? жаба не 1с, она вебсокеты умеет...
Итого 2 потока - считающий и общающийся с клиентом(-ами).
Ну ладно, три. Основной, который управляет всем, считающий и общающийся.
В названиях технологий не подскажу, не силён
9 qwerty
 
21.09.19
16:39
(8) так, вот. Ты попался. Вебсокеты с вероятностью 80% будут баниться копроративным брандмауером. Какой дугой, менее известный, но более предназначенный для решения задачи протокол нужно выбрать?
10 ДенисЧ
 
21.09.19
16:44
(9) Ну, я бы предложил snmp, но он тоже вряд ли пролезет через прокси...
11 qwerty
 
21.09.19
16:47
(10) признайся, ты админ?

https://ru.m.wikipedia.org/wiki/Server-sent_events
12 qwerty
 
21.09.19
16:52
О приемуществах SSE перед сокетами

https://stackoverflow.com/a/5326159/444079
13 ДенисЧ
 
21.09.19
16:54
(11) Я? Админ???
https://i.ytimg.com/vi/J1fEdcomYb4/hqdefault.jpg

(11)(12) Какая-то неизвестная технология, которая ещё не ушла в массы, поэтому не блокируется файрволами?
Если бек будет работать в корпприложении, то админы позаботятся о пробросе файрвола. Если же это некое левое приложение, то нечего с ним работать на рабочем месте, которое защищено этими самыми стенками.
14 qwerty
 
21.09.19
16:56
(13) а зачем ты предложил дичь snmp?
15 ДенисЧ
 
21.09.19
17:01
(14) А зачем ты предложил какую-то дичь, о которой я раньше не слышал? Я предложил нормальный вариант. А не нечто, которое ещё и не всеми поддерживается.
16 ДенисЧ
 
21.09.19
17:02
Кроме того "SSE connections can only push data to the browser." (вторая ссылка)
Как ты по ним будешь передавать "cancel execution"?
17 ДенисЧ
 
21.09.19
17:04
И ещё

- SSE suffers from a limitation to the maximum number of open connections, which can be specially painful when opening various tabs as the limit is per browser and set to a very low number (6). The issue has been marked as "Won't fix" (!!!! - моё) in Chrome and Firefox

= Only WS can transmit both binary data and UTF-8, SSE is limited to UTF-8. (Thanks to Chado Nihi).
18 qwerty
 
21.09.19
17:06
(15) пройди по ссылке, посмотри на кейсы. Ты в твитере получаешь уведомления от сервере не по вебсокетам, а по  SSE.
19 ДенисЧ
 
21.09.19
17:16
(18) Я в твиттере ничего не получаю ))
А смотреть кейсы? Зачем, если уже по первым предложениям видно, что это не подходит по условиям.
20 qwerty
 
21.09.19
17:30
(19) еще раз по буквам:

SSE connections can only push data to the browser. Online stock quotes, or twitters updating timeline or feed are good examples of an application that could benefit from SSE.

...

However, it can be overkill for some types of application, and the backend could be easier to implement with a protocol such as SSE.

Furthermore SSE can be polyfilled into older browsers that do not support it natively using just JavaScript

Зачем тебе при передаче статуса бинарные данные? Ты же не чат со смайликами пишешь и не получаешь файл от сервера?

Зачем мне дополнителные траблы с корпоративным firewall?

Далее:
SSEs are sent over traditional HTTP. That means they do not require a special protocol or server implementation to get working. WebSockets on the other hand, require full-duplex connections and new Web Socket servers to handle the protocol.

Зачем мне использовать дополнительный протокол, писать и поднимать дополнительный веб сокет сервер? Я не онлайн игру пишу, а нотификатор.
21 ДенисЧ
 
21.09.19
17:40
(20) @ачем тебе при передаче статуса бинарные данные?@
Я не вижу полного ТЗ. Может, я оттуда диаграмму обработки данных буду отдавать?
"Зачем мне дополнителные траблы с корпоративным firewall?"
А зачем тебе за корпофайром использовать левые программы? Ты собираешься левачить на работе?
22 qwerty
 
21.09.19
17:43
(21) я написал уже, сервер тупо должен отдавать число. Грубо говоря процент выполненной работы.

Кроме того, очень мощное приемущество SSE:
If you don’t need to send data to the server in “real-time” (e.g. voice/video chat, multiplayer games, …) go with Server-Sent Events. They are the standard HTTP way of pushing data (like notifications, messages or events) to clients. And they can be added just by implementing an additional endpoint in a controller, lowering the need to refactor the existing code base (in a well structured code base the “implementation cost” of both WS and SSE is the same), and making them somewhat faster to implement (and bring the feature to market).

https://blog.stanko.io/do-you-really-need-websockets-343aed40aa9b
23 qwerty
 
21.09.19
17:47
(21) еще раз, типовая ситуация с вебсокетами: ты написал на этих модных сокетах ультрамодную полнодуплескную нотификацию (это когда прогрессбар дает фидбек серверу, ага), а потом раз и на площадке клиента эта фича не работает. И админы не хотят ничего исправлять.
24 ДенисЧ
 
21.09.19
17:47
Сегодня тебе передавать число. А для cancel открывать ещё один end-point.
А завтра... Смотреть нужно ширшее. Так что в реальной работе я ещё 10 раз подумаю, как и что. И на собеседовании, если что, смогу отбиться.
25 ДенисЧ
 
21.09.19
17:48
(23) Если клиент - это один из 10000 , то это не клиент. А если клиент - это корпорация на 10000 человек, 9000 из которых понадобится моя программа - админы или подвинутся или вылетят.
26 qwerty
 
21.09.19
17:53
(24) да, действительно. Может в твою программку на Ява прийдется встроить онлайн realtime multiplayer игруху. С чатом на вебсокетах и няшными аватарками.
27 qwerty
 
21.09.19
18:14
28 Скиурус
 
21.09.19
18:44
- Имел возможность регулярно получатт статус работы от сервера для его отображения в прогрессбаре.
- Как реализовать отмену операции на сервере?

Да все просто. В реальном продуктивном софте это нигде не реализовано, потому что цена реализации несоразмерна пользе. Лаба чисто лаба, оторванная от реальности. Понять, простить и не забивать голову.

З.Ы. SSE как панацея, а. Надо ж было такое выдумать.
29 oleg_km
 
21.09.19
18:59
А как быть с https://developer.mozilla.org/ru/docs/Web/API/Server-sent_events/Using_server-sent_events

Ни эджем и иксплорером не поддерживается?
30 qwerty
 
21.09.19
19:23
(28) интересный у тебя взгляд на вещи

Я уже говорил выше - задача из жизни, которую также делают студенты.

К примеру из жизни:

https://wpvivid.com/wp-content/uploads/2019/08/backup-progress-bar.png
31 qwerty
 
21.09.19
19:24
(29) открой для себя полифиллы.
32 Asmody
 
21.09.19
21:37
Чувак прочитал статью про новую для себя феньку, решил порисоваться какой он крутой.
Ну а чё бы нет?
33 Лефмихалыч
 
21.09.19
21:45
(32) мне, то есть, не одному это так представилось
34 Fram
 
21.09.19
21:51
(9) эээ.. а разве винсокеты не поверх http и https работают?

(20) ты кажется не понимаешь значения слова could, утверждая что Твиттер использует эту технологию.
35 Fram
 
21.09.19
21:56
(31) это которые твою супер супер технологию в тыкву превращают?
36 Fram
 
21.09.19
21:57
*супер-пупер ))
37 qwerty
 
22.09.19
00:18
(35) ты так говоришь, как будто знаешь про все баги реализации

https://github.com/Yaffle/EventSource на IE 11 под win 7
38 qwerty
 
22.09.19
00:20
(34) ты знаешь чем винсокет отличается от вебсокета?
39 qwerty
 
22.09.19
00:23
Протокол WebSocket — это независимый протокол, основанный на протоколе TCP. Т.е. автоматом у тебя возникнут проблемы с firewall ами и прочими контроллирующими инстанциямм.
40 Fram
 
22.09.19
05:13
(38) опечатался, имел ввиду вебсокеты конечно. И да они работают поверх http и https, дополнительных портов открывать не нужно
41 qwerty
 
22.09.19
09:51
(40) откуда ты это вычитал? Вебсокеты работают поверх TCP.

Поверх Http работают push,comet и упомянутый выше как решение проблемы SSE.
42 qwerty
 
22.09.19
09:57
43 Fram
 
22.09.19
10:42
(41) да вот есть такой документ, который называется RFC 6455 https://tools.ietf.org/html/rfc6455, и там есть такая фраза "it is designed to work over HTTP ports 80 and 443"
44 Fram
 
22.09.19
10:45
(43)+ да, и, собственно, сам писал приложения с использованием вебсокетов
45 qwerty
 
22.09.19
12:14
Э...

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.

Http юзается только для хендшейка.

Вот иллюстрация:

https://hpbn.co/assets/diagrams/1a8db2948eb2aad0dd47470c6c011a42.svg
46 qwerty
 
22.09.19
12:26
И теперь самое главное: SSE being based on HTTP, it is more compliant with various elements of existing IT infrastructure (load balancers, firewalls, …)

Т.е. сам EventSource protocol (он зеленый) базируется на HTTP, что делает его проще.

Сам протокол вебсокетов не имеет никакого отношения к http.

Он работает на транспортном уровне, а не на прикладном.
47 qwerty
 
23.09.19
09:37
up!
48 Cyberhawk
 
23.09.19
09:42
(5) Однако именно так работают некоторые промышленные очереди сообщений
49 Cyberhawk
 
23.09.19
09:46
(20) "Зачем тебе при передаче статуса бинарные данные?" // Бинарная передача вместо какого-нибудь человекочитаемого ЖСОН - тоже уже промышленный стандарт
50 Cyberhawk
 
23.09.19
09:49
(46) "базируется на HTTP, что делает его проще" // Переведи эту аббревиатуру и не натягивай сову на глобус
51 ProgAL
 
23.09.19
09:50
(46) Так потребуются хитрые настройки файрволлов для вебсокетов или нет ?
52 Mukrob
 
23.09.19
10:08
я бы сделал через json нафиг сокеты если речь о http сайтах
53 Вафель
 
23.09.19
10:09
(2) с каких пор жава прогрмаммисты должны уметь фронт?
54 IVT_2009
 
23.09.19
11:26
Поток глушить можно только из самого потока , тут аналогия с фоновым заданием - нужно в сам поток передать команду - корректно убиться.
Мне видится веб сервис который слушает и отдает команды , а точней если что принимает то присваивает значения переменным , которые видит так же выполняемый поток. На сервис запросили состояние , он отправил значение переменной Прогресс. Сервису дали запрос - прибить поток , сервис принял - изменил значение переменной. поток ее периодически опросил , получил команду и убился. Все так же как и в 1с
55 IVT_2009
 
23.09.19
11:29
Если встает вопрос выбора протокола , то мне очень MQTT нравится. Он проходит кругом и весит мало
56 IVT_2009
 
23.09.19
11:34
Внимательно перечитав ТЗ понял , что я не знаю честно говоря ответа на данный вопрос , так как не использовал эти технологии в своей жизни.
57 qwerty
 
23.09.19
18:25
ОК, теперь я почти у цели: как ты отлаживал получение события на стороне клиента? У меня на короткое время получилось отловить event from server.
58 qwerty
 
23.09.19
18:26
у меня хромиум, интеграция с vue
59 qwerty
 
23.09.19
18:27
(53) - они обязаны уметь фронт. Их на работу не возьмут без фронта
60 Китайгород
 
23.09.19
18:29
(0) >> Какую именно клиентскую (браузер) технологию нужно выбрать

Рекомендую Google Chrome
61 PloAl
 
23.09.19
19:33
(0) самый простой ответ полуhttp он же http пополам - http/2
62 qwerty
 
23.09.19
22:15
(52) вы провалили собеседование
63 qwerty
 
23.09.19
22:20
(50) э... HTTP это протокол прикладного уровня. Программироваие на этом уровне по определению должно быть проще, чем у вебсокетов.
64 Fram
 
23.09.19
22:24
(45)(46) ну и какое это отношение к настройке файрволов имеет? мы же за файрволы вроде говорили..
65 qwerty
 
23.09.19
22:30
(64) нужен порт 443
66 Китайгород
 
23.09.19
23:54
(65) Так в чем задача? Обойти ограничения фаервола, если он блокирует 443 порт для браузера???
Если да, то хз как это сделать.
Если нет, то просто используй https для передачи запросов с клиента на сервер.
67 Zamestas
 
24.09.19
01:50
(0) Может через WebRTC всё это прокрутить?
68 Пузан
 
24.09.19
05:11
А в чем проблема настроить правила на корпоративном файрволе, если это требуется для работы компании? По такой логике, файрвол вообще должен все блокировать и не фига в интернеты ходить там всякие.
69 2mugik
 
24.09.19
07:06
(65)Если все повесить на 80 работать не будет?
70 Cyberhawk
 
24.09.19
08:35
(63) Я и говорю - не натягивай
71 LinuxOrg
 
26.09.19
11:37
а зачем ты не используешь а зачем ты не используешь?
72 OpKc
 
26.09.19
12:15
ТСу нужно гербалайф какой-нибудь продавать. Так энергично продвигает SSE, что мне аж захотелось податься в веб и вот это всё
73 LinuxOrg
 
26.09.19
16:25
short pooling
74 LinuxOrg
 
26.09.19
17:57
топик стартер, ты задолбаешься отлаживать этот широко известный в узких кругах протокол

поллинг не так плох, как его малюют в интернетах. И он имеет одно неоспоримое преимущество: твои клиенты не будут ждать недели, пока ты будешь отлаживать это
75 unbred
 
26.09.19
20:52
http://skrinshoter.ru/s/260919/ArwAjFf4
не легка судьба явапрограммиста
76 mikecool
 
26.09.19
21:20
я думал тут что полезное, а тут снова выпендреж...