Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
11.02.2017, 16:42
|
|||
---|---|---|---|
Одна прога пишет строку, другая читает(если хочет) но не удаляет |
|||
#18+
Грубо. Есть несколько аккаунтов, имена известны обоим сторонам. У аккаунта есть "состояния", например: Trying, Registered, Error(номер, описание) Сервер генерирует эту строку "состояния" для аккаунта в какие-то моменты. Должен ее куда-то записать. А клиент должен эту строку прочитать (чтоб на себе отобразить). При этом "состояние" генерируется сервером не непрерывно, да и клиент может быть не запущен, а потом взяли-запустили дабы посмотреть это самое "состояние". Здесь кроме таймера на клиенте ничего умного в голову не приходит. Вопрос где хранить. В старой проге сервер сохранял файл "имя_аккаунта", внутрь писал "состояние", сервер остановили - файл убился. Клиент когда ему надо, идет и читает этот файл (по таймеру, дабы изменения отслеживать). С файлами надежно (динамика несильная), но хочется чего-то посолиднее. Вот это может? Правильно мыслю? Creating Named Shared Memory М.б. в .Net самом чего-то свое есть? Mailslot не пойдет, он читает и удаляет. Надо чтоб сервер писал, когда есть изменение (клиент на момент изменения не обязательно запущен), а клиент читал когда ему надо (там уже может лежать инфа, на момент его запуска). ... |
|||
:
Нравится:
Не нравится:
|
|||
|
11.02.2017, 16:54
|
|||
---|---|---|---|
Одна прога пишет строку, другая читает(если хочет) но не удаляет |
|||
#18+
Дмитрий77, СУБД рассматривал? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
11.02.2017, 17:11
|
|||
---|---|---|---|
Одна прога пишет строку, другая читает(если хочет) но не удаляет |
|||
#18+
Изопропил, Ну ты скажешь тоже. СУБД. Речь идет о SIP-аккаунтах. Мне надо отобразить: зарегистрирован/не зарегистрирован. Регистраций может быть несколько. user@server:[port] -однозначно определяет аккаунт, поэтому это сочетание можно присвоить имени файла (или mailslot-а, который здесь неудобен), а "внутрь" записать значение(текст), т.е. зарегистрирован или не зарегистрирован. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
11.02.2017, 17:57
|
|||
---|---|---|---|
|
|||
Одна прога пишет строку, другая читает(если хочет) но не удаляет |
|||
#18+
Дмитрий77М.б. в .Net самом чего-то свое есть? Дуплексный WCF-сервис. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
11.02.2017, 19:36
|
|||
---|---|---|---|
Одна прога пишет строку, другая читает(если хочет) но не удаляет |
|||
#18+
Дмитрий77, СУБД может быть очень простой и легковесной Sip account с состоянием вполне может в СУБД храниться ... |
|||
:
Нравится:
Не нравится:
|
|||
|
11.02.2017, 19:38
|
|||
---|---|---|---|
Одна прога пишет строку, другая читает(если хочет) но не удаляет |
|||
#18+
Дмитрий77Сервер генерирует эту строку "состояния" для аккаунта в какие-то моменты. Должен ее куда-то записать. А зачем куда-то писать? По-моему достаточно, что бы сервер отвечал заинтересованным клиентам Сон Веры ПавловныДмитрий77М.б. в .Net самом чего-то свое есть? Дуплексный WCF-сервис. Не уверен, что нужен именно дуплексный, но WCF-сервис поднять надо. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
11.02.2017, 20:05
|
|||
---|---|---|---|
Одна прога пишет строку, другая читает(если хочет) но не удаляет |
|||
#18+
ZeroMQ , открой сокет ZMQ_PUB и сыпь все туда. Будут подписчики, получат, не будет - просто потеряется. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
11.02.2017, 20:55
|
|||
---|---|---|---|
Одна прога пишет строку, другая читает(если хочет) но не удаляет |
|||
#18+
Чет советы все мудреные. У меня вот чего пока теста ради получилось (на базе моей же ссылки в первом посте): Сервер: Код: vbnet 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.
Клиент: Код: vbnet 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.
Причесать, все отлично. Но вот вижу проблемы. С клиентом проблем нет. Он знает имя "sip:100@192.168.1.1:5068", вскрывает "файл" и читает. Ну и закрывает handle сразу. А вот с "сервером" вижу траблы. Т.е. открыть, положить и закрыть я не могу, тогда "файл" сдохнет. (с файлом на диске в этом плане удобнее) Поэтому вместо чтоб обращаться по имени "sip:100@192.168.1.1:5068" когда что-то меняется я должен тянуть сквозь всю прогу пару ("sip:100@192.168.1.1:5068", hMapFile), в общем случае несколько пар по числу регистраций. Иногда надо менять эти пары динамически. Ну т.е. понятно что когда делаю Register, надо hMapFile создать, когда UnRegister -грохнуть, меняется статус - класть туда строку. Плюс еще Global\ мне поднять не удалось (по крайне мере под юзером.) Под админом SeCreateGlobalPrivilege вроде ставятся. У меня сервером будет NT Service, поэтому нужно Global\ там думаю получится, но скорее всего еще придется возиться с SA (в принципе тоже понятно как). В общем везде гимор, м.б. файлы оставить и не париться. 10 лет никто не жаловался. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
11.02.2017, 21:42
|
|||
---|---|---|---|
Одна прога пишет строку, другая читает(если хочет) но не удаляет |
|||
#18+
Дмитрий77Причесать, все отлично. Я так понял, что это работает только если и клиент и сервер находятся на одной машине. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
11.02.2017, 21:54
|
|||
---|---|---|---|
Одна прога пишет строку, другая читает(если хочет) но не удаляет |
|||
#18+
Cat2Я так понял, что это работает только если и клиент и сервер находятся на одной машине. Надеюсь, что на соседнюю не ходит (в том числе с \Global). Я пока user-user(тот же) пробовал без \Global. Там еще SA понадобится. Под юзером без админа у меня \Global не получился. Ну вообще зараза, потому что будут проблемы при тестировании под юзером если положу global. А под юзером тестировать удобнее. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
11.02.2017, 21:59
|
|||
---|---|---|---|
Одна прога пишет строку, другая читает(если хочет) но не удаляет |
|||
#18+
Ну а с парой ("name", hMapFile) в принципе обычная VB-коллекция справится : Код: vbnet 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
|
12.02.2017, 16:33
|
|||
---|---|---|---|
Одна прога пишет строку, другая читает(если хочет) но не удаляет |
|||
#18+
Ну, у меня все получилось. Вот такой причесанный модуль: Код: vbnet 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. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96.
К нему любимая универсальная функция CreateMailslotSecurityFullAccess() As SECURITY_ATTRIBUTES годящаяся на все случаи жизни (Mailslot, Event и т.п.) смысл, что объект доступен для всех и вся Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
Global\ требует SeCreateGlobalPrivilege для создающего "shared file" процесса, что по умолчанию доступно для NT Service (мой случай), либо для админа (сойдет для тестирования). Для NT Service в обязательном порядке лепим CreateMailslotSecurityFullAccess, чтоб клиент под юзером мог читать инфу. Ну а в моем случае реализация такая: Сервер при регистрации аккаунта создаем "shared file" и запихиваем hMapFile в коллекцию с ключем "имя_аккаунта" Код: vbnet 1. 2. 3. 4. 5. 6. 7.
При изменении статуса пишем его в "файл": Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
Перед закрытием "сервера" закрываем все "файлы" и грохаем коллекцию, хотя оно и так все убьется, но аккуратность не повредит Код: vbnet 1. 2. 3. 4. 5. 6. 7.
Клиент (здесь вообще все просто) Код: vbnet 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
|
|
start [/forum/topic.php?fid=20&mobile=1&tid=1400047]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
39ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
others: | 16ms |
total: | 150ms |
0 / 0 |