Имя: Пароль:
1C
1С v8
Как серверу вызвать событие на клиенте?
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 года, что не мешает его использовать всему Инету!
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший