![]() |
![]() |
|
Как серверу вызвать событие на клиенте? | ☑ | ||
---|---|---|---|---|
0
Собенко
01.03.12
✎
20:20
|
Архитектура- клиент-сервер. Задача: нужно чтобы сервер вызвал определенную процедуру на определенном клиенте, подключенном к серверу. Можно-ли это реализовать и как?
(Это что-то сродни принципу работы ICQ и тому подобного софта, когда не обработчик ожидания периодически опрашивает сервер, а сервер сам вызывает обработчик события на клиенте) |
|||
1
pumbaEO
01.03.12
✎
20:22
|
Никак, 1С ориентируется на протокол Http, соответственно никак. Пока не сделают вебсокеты или еще че нибудь не придумают, на уровне платформы.
|
|||
2
Нуф-Нуф
01.03.12
✎
20:22
|
обработчик ожидания на клиенте
|
|||
3
zak555
01.03.12
✎
20:23
|
что именно хочешь вызвать ?
|
|||
4
GROOVY
01.03.12
✎
20:25
|
(0) Невозможно.
|
|||
5
Нуф-Нуф
01.03.12
✎
20:28
|
(4) эмулировать через обработчик ожидания?
|
|||
6
pumbaEO
01.03.12
✎
20:29
|
[когда не обработчик ожидания периодически опрашивает сервер, а сервер сам вызывает обработчик события на клиенте)] (5)
|
|||
7
GROOVY
01.03.12
✎
20:31
|
(5) Ну так конечно можно, но "Вызвать с сервера процедуру на клиенте" - невозможно.
|
|||
8
ДенисЧ
01.03.12
✎
20:36
|
хм... Ожидание.... А тема интересная...
Осталось понять, как забирать данные с сервера, то есть где их хранить, и часть вопросов будет снята.... |
|||
9
zak555
01.03.12
✎
20:37
|
(8) в хранилище 7
|
|||
10
tridog
01.03.12
✎
20:41
|
(0) Это неправильно. Забудь.
|
|||
11
andrewks
01.03.12
✎
20:43
|
(9) +1
|
|||
12
ДенисЧ
01.03.12
✎
20:43
|
(9) В хоронилище... Тоже вариант
(10) Ага. То-то в винде callbackи вовсю используются. Да и в унихах тоже... Наверное, только Нуралиев и tridog знают сокровенную истину... |
|||
13
vmv
01.03.12
✎
20:44
|
(8) через временное хранилище можно замутить, но это все извраты, врадли есть в этой задаче практический смылс, автор так таинтсвеннен словно достиг просветленной нетленной идеи, а я такой бухой, что мне па-барабану)
|
|||
15
pumbaEO
01.03.12
✎
20:46
|
запилят вебсокеты можно будет. Сейчас нет.
|
|||
16
zak555
01.03.12
✎
20:47
|
(14) хранилище зато для всех доступно
|
|||
17
zak555
01.03.12
✎
20:48
|
вдруг нужно будет всем клиентоса разослать всякую куйну !
хотя если бы было озвучено (3) = всё было ясно |
|||
18
ДенисЧ
01.03.12
✎
20:51
|
(17) Озвучиваю. Идёт длительный сервеный процесс загрузки данных. Надо зверю показать процесс. На каждый кусок данных дёргать сервер - не вариант. Поэтому нужно, чтобы сервер сам отчитывался о своей работе.
|
|||
21
vmv
01.03.12
✎
20:54
|
(18) наиболее логично чтобы он писал куда-то в базу результаты своих телодвижений, а клиентура спокойно читала сей манскрупти, как Будда, сидя на слоне, завывал "амммм-амммм"
|
|||
22
vmv
01.03.12
✎
20:55
|
да хрень это все - сервер должен пахать, а все попытки его дуплить от лукавого и нечего делать
|
|||
23
ДенисЧ
01.03.12
✎
20:55
|
(20) а вот и в этом решение (см. выше) сам не догадался.
Кстати, в винде той же я могу из длительной обработки обновить окно клиента, причём вне зависимости от желания клиента. А тут не могу. Криво это, знаете ли. |
|||
24
ДенисЧ
01.03.12
✎
20:56
|
(21) наиболее логично, если сервер сам, по своему желанию посылал бы сообщения клиенту. А тот уже думал бы, надо ли ему это.
|
|||
25
zak555
01.03.12
✎
21:02
|
(18) а эта шняга СообщениеПользователю только по окончанию отправить :?
|
|||
27
ДенисЧ
01.03.12
✎
21:32
|
(25) угу
(26) я ж говорю, через опу сделали |
|||
28
tridog
01.03.12
✎
21:53
|
(12) Не нужно путать божий дар с куем. Винда, использующая колбеки, выполняется на 1 компьютере. Если бы первое открытие папки "Мой компьютер" производил бы сервер в США, а второе - резервный в Европе, колбеков с клиента на сервер в ней точно не было бы.
Всем, придумавающих через какую опу это таки сделать - продумайте, чтобы оно продолжило работать при внедрении отказоустойчивого кластера. Если будет - не радуйтесь, не факт, что это ВНЕЗАПНО не перестанет работать после очередного апдейта. |
|||
29
Asmody
01.03.12
✎
21:55
|
Сервер - он на то и сервер, чтобы делать то, что его просят, а не тыркать всем тыщам клиентам, что им надо делать
|
|||
30
andrewks
01.03.12
✎
22:02
|
(29) сейчас всё стало настолько условным... если сервер пошлёт запрос на клиент, то уже сервер будет клиентом, а клиент - сервером %()
|
|||
32
Asmody
01.03.12
✎
23:27
|
(30) а если на стороне сервера кластер, и запрос обрабатывается частями на разных узлах кластера (в 1С пока такого нет, но вдруг?), и несколько узлов станут пинать клиента что-то сделать, что получится?
|
|||
33
Asmody
01.03.12
✎
23:28
|
(31) сервер на то и сервер, чтобы обслуживать много запросов и сразу.
|
|||
34
andrewks
01.03.12
✎
23:38
|
(32) ну так пинать будет центральный агент, а он один
|
|||
35
Asmody
01.03.12
✎
23:47
|
(34) с чего бы ему пинать? у агента задача своя есть: нагрузку по серверам раскидать. А вы хотите со всех узлов дёргать агента, чтобы он дёргал клиентов… ууу!…
|
|||
36
andrewks
01.03.12
✎
23:49
|
(35) погорячился, не агент, а менеджер, конечно. думаешь, не справится?
|
|||
37
Asmody
02.03.12
✎
00:02
|
(36) хоть горшком назови. в любом случае, поскольку сервер сам не может инициировать соединение с клиентом, то как-то ему придётся поддерживать то соединение, которое начал клиент, постоянно спрашивая того: "эй, ты там ещё живой?"
|
|||
39
andrewks
02.03.12
✎
08:12
|
(37) опередил (38)
не мешает же это работать скайпам, аськам, и прочим |
|||
40
Собенко
05.03.12
✎
21:25
|
Да, WebSocket это именно то, что нужно. На сегодня браузеры Google Chrome (начиная с версии 4.0.249.0), Apple Safari (начиная с версии 5.0.7533.16), Mozilla Firefox (начиная с версии 4) и Opera (начиная с версии 10.70 9067) реализовали поддержку этого протокола. Если 1С реализует эту технологию, то отпадет необходимость на клиентах указывать время обновления для форм списков. Это снизит бестолковый трафик и нагрузку сервера бестолковыми запросами в разы! А в системах, где работает не одна сотня, а то и тысяча пользователей (а именно на это и замахнулась версия 8.2) это очень существенно! Кардинально менять ничего не надо. Надо только реализовать возможность подписки на событие записи ряда классов объектов другими клиентами. Так, чтобы к примеру при проведении документа, обработчик события на клиенте-инициаторе позволял "уведомить" определенных или всех подписавшихся на это событие клиентов. При получении уведомления, на "клиенте-слушателе" должна отрабатывать определенная процедура (отличная от обработчика этого события на клиенте-инициаторе), которая и выполнит либо обновление формы, либо другие необходимые действия.
Реализовать это в платформе я думаю не очень сложно, т.к. сервер "знает" и контролирует каждое подключение к базе. Следовательно не сложно реализовать и уведомление заинтересованных клиентов о наступлении определенного события. |
|||
41
ДенисЧ
05.03.12
✎
21:27
|
а теперь расскажите, чем _принципиально_ отличаются эти сокеты от коллбеков.
|
|||
42
Maxus43
05.03.12
✎
21:35
|
а метод "Оповестить" чо делает? он же посылает событие всем формам открытым
|
|||
43
БибиГон
05.03.12
✎
21:40
|
(42) это всем, а если надо только одному.
|
|||
44
ShoGUN
05.03.12
✎
21:40
|
(42) Прочитай до конца, там написано, где этот метод доступен :)
|
|||
45
ShoGUN
05.03.12
✎
21:42
|
(43) Это как раз не проблема, по крайней мере пока у тебя не сотни открытых форм.
Проблема в том, что это чисто клиентская процедура - для того, чтобы одна форма могла достучаться до другой _на_том_же_клиенте_ при надобности. Сервер тут вообще ни при чём. |
|||
46
Asmody
05.03.12
✎
21:42
|
(38) заметка 9го года. Будущее так и не настало. Однако, не всё так радостно, как казалось на первый взгляд.
|
|||
47
Собенко
06.03.12
✎
14:52
|
Метод "Оповестить" оповещает все открытые формы на этом-же клиенте. А необходимо оповестить не форму в этом-же приложении, а другое приложение, запущенное другим пользователем на другой совершенно машине. Я же писал в самом начале- так как работает ICQ: клиент на одной машине отправляет сообщение, другой клиент не "теребит" сервер каждые 5 секунд, как это делают почтовые клиенты, а просто "слушает" определенный порт. Когда на этот порт начинают поступать пакеты, клиент "просыпается" и начинает их обрабатывать, получая сообщение.
Про WebSockets можно почитать здесь: wiki:WebSocket http://www.rfc-editor.org/info/rfc6455 http://habrahabr.ru/blogs/webdev/79038/ На сколько я понял колбэки реализованы на протоколе http, который априори не является полнодуплексным (асинхронным). По этому колбеки это только эмуляция асинхронной работы сервера и клиента, а вэб-сокеты реализуют именно полноценный асинхронный (полнодуплексный) обмен. |
|||
48
Собенко
15.03.12
✎
15:21
|
(v8: Как серверу вызвать событие на клиенте? Будущее уже настало. Читаем http://www.rfc-editor.org/info/rfc6455 Документ имеет статус "Предложенный стандарт". Такой статус имеют не мало протоколов, методик и т.п. используемых в Интернете. На сегодня протокол поддерживается всеми популярными браузерами. Через пару-тройку лет (не раньше. Раньше ни одному документу Комитет IETF не присваивает этот статус) документ получит статус "Черновой стандарт". К слову протокол HTTP (http://www.rfc-editor.org/info/rfc2616) на сегодня также имеет статус "Чернового стандарта" еще с 1999 года, что не мешает его использовать всему Инету!
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |