|
|
|
ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).
|
|||
|---|---|---|---|
|
#18+
libzmq.dll была откомпилирована с помощью MS VS 2012 Update 4, с указанием, что целевая платформа - Windows XP (v110_XP). То есть, работать будет на Windows XP и более новых. Приложенные к библиотеке тесты отработали без проблем, и все примеры, рассмотренные ранее, также работают. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2014, 23:52 |
|
||
|
ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).
|
|||
|---|---|---|---|
|
#18+
Сама библиотека. Распаковать и положить возле приложения. Больше для работы ничего не нужно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2014, 23:54 |
|
||
|
ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).
|
|||
|---|---|---|---|
|
#18+
Вернется к брокеру с балансировкой нагрузки (с учетом перехода на версию ZeroMQ 4.0.4): 16681363 Брокер с балансировкой нагрузки Код: pascal 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. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. 187. 188. 189. 190. 191. 192. 193. 194. 195. 196. 197. 198. 199. 200. 201. 202. 203. 204. 205. 206. 207. 208. 209. 210. 211. 212. 213. 214. 215. 216. 217. 218. 219. 220. 221. 222. 223. 224. 225. 226. 227. 228. 229. 230. 231. 232. 233. 234. 235. 236. 237. 238. 239. 240. 241. 242. 243. 244. 245. 246. Как видим, кода довольно много, чтобы быстро во всем разобраться. Это связано с тем, что использовались вызовы API ZMQ низкого уровня. Вот основной рабочий цикл: Основной рабочий цикл брокера Код: pascal 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. Громоздко, да. И это мы еще использовали наши вспомогательные процедурки вроде s_recv()/s_send(), а без них бы пришлось пересылать сообщения ZMQ и заниматься упаковкой-распоковкой данных. В общем, если использовать низкуровневое API в сложных задачах, то и кодировать долго, и потом разбираться непросто. Нужно переходить к более высоким уровням абстракции. Ранее упоминалась библиотека Delphi: https://github.com/bvarga/delphizmq Из этой библиотеки мы использовали только модуль zmq.pas, который и обеспечивает API низкого уровня. Модуль zmqapi.pas предоставляет объектный интерфейс более высокого уровня в соответствии видением прекрвсного с создателя библиотеки и, надо полагать, в соответствии с задачами, которые стояли перед ним в момент написания. К сожалению, больше года библиотека почти не обновляется, и зависла на поддержке ZeroMQ версий 2.* и 3.*. ~~~~~~~~~~~~ К счастью, выход есть: iMatrix (контора, которая и разрабатывает ZeroMQ) создала и развивает библиотеку API высокого уровня: http://czmq.zeromq.org/ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2014, 02:11 |
|
||
|
ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).
|
|||
|---|---|---|---|
|
#18+
High Level API: http://czmq.zeromq.org/ Вот так на Delphi будет выглядеть "Hello, Worrld!" Код: pascal 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. Здесь пара сокетов: PUSH и PULL, взаимодействующих между собой по inproc - протоколу. В сокет push посылается строка 'Hello, World!', которая принимается из сокета pull. Как видим, строка здесь - "Сишная", то есть наш привычный PChar: Код: pascal 1. 2. 3. Так сделано из-за того, что и эта библиотека (как и libzmq.dll) реализована в виде dll. Более того, чтобы избежать возможных проблем с менеджером памяти, освобождение памяти, выделенной для строки, также выполняется специальным методом: Код: pascal 1. Т.обр, не требуется создание/освобождение контекста, настройки сокетов, биндингов, коннектов и всей возни с упаковкой/распаковкой строк. К сообщению приложены файлы библиотеки czmq.dll, libzmq.dll, скомпилированные с помощью MS VS 2012 U4 (должны работать на Win XP и более новых). О том, как использовать эту красоту, расскажу чуть позже. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2014, 03:03 |
|
||
|
ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).
|
|||
|---|---|---|---|
|
#18+
Использование. Для использования CZMQ следует подключить файл czmq.h, приложенный к сообщению. При импорте .h файлов я старался избегать использования устаревших (deprecated) элементов, однако впоследствии, в процессе изучения ZMQ по не очень новым руководствам, пришлось кое-что добавить. Возможно, позднее файл биндинга будет изменен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2014, 03:27 |
|
||
|
ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).
|
|||
|---|---|---|---|
|
#18+
ZeroMQ High Level API: http://czmq.zeromq.org/ К сообщению приложены файлы библиотеки czmq.dll, libzmq.dll, скомпилированные с помощью MS VS 2012 U4 (должны работать на Win XP и более новых). О том, как использовать эту красоту, расскажу чуть позже. zbeacon использовал? про нее будет рассказ? http://czmq.zeromq.org/manual:zbeacon ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2014, 08:51 |
|
||
|
ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).
|
|||
|---|---|---|---|
|
#18+
PPA, обязательно будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2014, 15:08 |
|
||
|
ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).
|
|||
|---|---|---|---|
|
#18+
Особенности High-level API CZMQ : Автоматизация обслуживания сокетов. К примеру, при закрытии контекста все его сокеты обработка будут также закрываться. При этом в некоторых случаях для сокетов можно назначить таймайт. Кроссплатформенное управление тредами. Передача потоков сообщений от родительских тредов к дочерним. (При этом автоматически будут использоваться сокеты PAIR по протоколу inproc). Кроссплатформенный доступ к системным часам. Специальный реактор для замены zmq_poll(). Цикл опроса прост, громоздок. Каждый раз приходится писать один и тот же код: обсчет таймеров и вызов процедур обработки (ридеров) по мере готовности сокетов. Простой реактор с ридерами сокетов и таймерами позволит сократить время написания цикла обработки. Правильная обработка нажатия Ctrl-C для консольных приложений. ... Кроме того, в CZMQ версии 3.* добавлены: Класс zsock, который работает вообще без контекста и с конструкторами, совмещающими операции создания и коннекта/биндинга. Класс zactor для multithreaded - разработки. Класс zgossip для исследования конфигурации сети. Класс zrex для регулярок. Функций управления процессами - zsys. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2014, 20:37 |
|
||
|
ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).
|
|||
|---|---|---|---|
|
#18+
Вариант брокера с балансировкой нагрузки, реализованного с помощью High-level API CZMQ: Брокер с балансировкой нагрузки & CZMQ Код: pascal 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. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. 187. 188. 189. 190. 191. 192. 193. 194. 195. 196. 197. 198. 199. 200. 201. 202. 203. 204. 205. 206. 207. 208. 209. 210. 211. 212. 213. 214. 215. 216. 217. "Чистый" ZeroMQ в случае прерывания (по Ctrl+C) вернет код завершения операции -1 и установит код ошибка EINTR. Здесь же (в CZMQ) операция просто вернет nil: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. Если используем zmq_poll() ( 16619033 ), то следим за кодом завершения: Код: pascal 1. 2. Но в данном примере мы используем РЕАКТОР CZMQ. Вот что он позволяет. Любому сокету может быть назначить ридер: код, который вызывается всякий раз, когда в сокете появляются данные, готовые для чтения. Отключить ридер для сокета. Назначить таймер, который будет запускаться один или несколько раз через указанные промежутки времени. Отключить таймер. Естественно, цикл опроса внутри использует zmq_poll(). Всегда, когда происходит добавление или удаление ридеров, выполняется перестраивание структуру данных для опроса и пересчитываются вычисляются таймауты, чтобы найти следующий таймер. После этого вызывается ридер и обработчики таймера для каждого сокета и таймера, которые требуют обслуживания. Когда мы используем шаблон "Реактор", код как бы выворачивается наизнанку. Код внешне выглядит примерно так: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. Таким образом, обработка сообщений ZMQ размещена в коде специальных методов - обработчиков. При этом один и тот же обработчик может обрабатывать как активность сокета (попступление данных), так и таймеров сокета. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2014, 21:41 |
|
||
|
ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).
|
|||
|---|---|---|---|
|
#18+
Что-то у меня обработка Ctrl+C работает неправильно. В "чистом" ZMQ все ОК, а с CZMQ - крутые глюки какие-то. И не то чтобы это меня особо напрягает, но все же. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2014, 21:43 |
|
||
|
ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).
|
|||
|---|---|---|---|
|
#18+
Что-то не очень вразумительно про реактор написал. Ладно, полшага назад. Вот версия брокера, использующего CZMQ, но без реактора. Брокер с балансировкой нагрузки & CZMQ без реактора Код: pascal 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. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. Отличие от версии 16775038 - в главном цикле: Код: pascal 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. Объект workers теперь - не массив, а список типа p_zlist_t. Видна работа с фреймами: Код: pascal 1. 2. Составные сообщения теперь принимаются целиком, а не частями: Код: pascal 1. Ну и забавные вещи вроде строк с форматированием ("Си"шный format()): Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Отмечу, что zsocket_connect() / zsocket_bind() - процедуры с переменным числом параметров: Код: pascal 1. 2. 3. А так как процедуры сишные - не забываем, в случае использования констант в параметрах, указывать модификатор типа для односимвольных строк: Код: pascal 1. 2. То же самое: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. То есть там, где требуется "настоящий" адрес данных - в объявлении константы указываем модификатор типа. Или просто используем переменную. ... ... ... Теперь, имхо, разобраться с моим предыдущим сообщением ( 16775038 ) гораздо проще. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2014, 00:22 |
|
||
|
ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).
|
|||
|---|---|---|---|
|
#18+
Шаблон "Асинхронный клиент/сервер" . Будем создавать архитектуру сети N-1, когда несколько разных клиентов асинхронно общаются с одним сервером. Работать это будет вот так: - клиенты коннектятся к серверу и отправляют запросы; - на каждый запрос сервер отправляет 0 или больше ответов; - клиенты могут отправлять множество запросов без ожидания ответов; - серверы могут отправлять множество ответов без ожидания новых запросов. Топология: ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2014, 00:42 |
|
||
|
ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).
|
|||
|---|---|---|---|
|
#18+
В целях упрощения тестирования, кодировать будем в рамках одного процесса, как мы уже делали несколько раз. Т.е., множество тредов будет имитировать многопроцессную архитектуру. При запуске примера видно, что три клиента (каждый со случайным id) выводят на консоль ответы от сервера. Если присмотреться, то можно заметить, что каждая задача клиента порождает ноль или больше ответов на каждый запрос. Модель асинхронного клиент-сервера Код: pascal 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. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. Некоторые замечания к коду примера. Клиенты шлют запросы раз в секунду и получают обратно ноль или несколько ответов. Чтобы такое сделать с помощью zmq_poll(), мы не может просто опрашивать с 1-секундным таймаутом, или мы завершим отправку нового запроса только через 1 секунду после того, как мы примем последний ответ. Поэтому мы опрашиваем с высокой частотой (100 раз в секунду, по 1/100 секунде на опрос ), что можно считать достаточно точным. Сервер использует пул рабочих нитей, и каждая из них обрабатывает один запрос синхронно. Он соединяет их со своими фронтэнд сокетами с помощью внутренней очереди. Соединение фронтэнд и бэкэнд сокетов выполняется с помощью вызова zmq_proxy(). Таким образом, более детальная структура асинхронного сервера такова: ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2014, 02:15 |
|
||
|
ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).
|
|||
|---|---|---|---|
|
#18+
Стоит подчеркнуть, что для диалога между клиентами и сервером используются сокеты DEALER -> ROUTER, в то время как внутри сервера, для общения между главной нитью сервера и рабочими используются сокеты DEALER -> DEALER. Если бы сокеты были строго синхронными, то мы бы использовали сокет REPORT. Однако, так как мы хоти отправлять множество ответов, нам нужен асинхронный сокет. Мы не хотим маршрутизировать ответы, так как они всегда идут к одной серверной нити, который слал нам запрос. Посмотрим на маршрутизацию конверта сообщения. Клиент посылает сообщение, содержащие один кадр. Нить сервера принимает сообщение из двух кадров: исходное сообщение с префиксом из идентификатора клиента. Мы отправляем эти два кадра рабочему, который рассматривает его как обычный конверт ответа и возвращает его нам как двухкадровое сообщение. Затем мы первый кадр используем как идентификатор для маршрутизации второго кадра при отправке ответа клиенту в качестве ответа. Схема примерно такая: Client Server frontendWorker[ DEALER ]<----->[ ROUTER <-----> DEALER <-----> DEALER ]1 часть2 части2 части Теперь насчет сокетов. Для реализации балансировщика нагрузуки для общения с рабочими мы могли бы использовать схему ROUTER -> DEALER, но это повлекло бы много дополнительной работы. В данном случае схема DEALER -> DEALER очевидно предпочтительнее, обеспечивая компромисс между низкой латентностью для каждого запроса и повышенным риском разбалансировки нагрузки рабочих. В данном случае было сделано "как проще". При построении серверов, которые сохраняют состояние клиентов, возникают классические проблемы. Если сервер хранит состояние каждого клиента, а клиентов подключается все больше и больше, в конце концов наступает момент исчерпания ресурсов. Даже если одни и те же клиенты сохраняют коннект, и если вы используете идентификацию по умолчанию, то каждый соединение будет выглядеть как новое. В примере выше мы немного сжульничали, сохраняя состояние только в течении короткого времени (время, необходимое работнику для обработки запроса), а затем сбрасывая состояние. Но во многих случаев это непрактично. Для правильного управления состоянием клиента в асинхронном сервере, необходимо: - От клиента к серверу следует реализовать heartbeating. В нашем примере, мы шлем запросы по одному в секунду, и это достоверно можно считать хартбитингом. Heartbeat - сердцебиение.Хартбит - heartbeat - это периодический сигнал, генерируемый аппаратно или программно, предназначенный для определения нормального функционирования системы либо для синхронизации других компонентов системы. Обычно хартбит - это посылка между машинами с регулярными интервалами времени порядка секунды. Если хартбит не принимается в течении какого-то вреиени - обычно в течении нескольких интервалов хартбита - то считается, что машина, которая должна посылать хартбит, неисправна. Пример: Система "Периметр". - Сохраняйте состояние клиента, используя идентификатор (сгенерированный автоматически или как-либо иначе) в качестве ключа. - Следите и реагируйте на остановку хартбита. Если от клиента не приходо запроса, скажем, в течении двух секунд, сервер может это обнаружить и уничтожить все состояния, связанные с данным клиентом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2014, 03:36 |
|
||
|
ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).
|
|||
|---|---|---|---|
|
#18+
Рабочий пример. Межброкерная маршрутизация. Постановка задачи. Только что нам позвонил лучший клиент и попросил срочно спроектировать мощную систему облачных вычислений. В качестве облака он представляет себе совокупность множества датацентров, каждый кластер клиентов и рабочих которого работают вместе, как единое целое. Для нас такая задача - как два байта переслать. Мы ж дельфисты. Смоделирует эту задачу, используя ZeroMQ . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2014, 03:56 |
|
||
|
ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).
|
|||
|---|---|---|---|
|
#18+
ZeroMQ, А почему эту тему не ведешь в виде отдельного профильного ресурса? заведи свой сайт-блог - контент ведь качественный. а тут ведь затеряется в "мусорных вопросах" если не пинать каждый раз в топ :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2014, 10:23 |
|
||
|
ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).
|
|||
|---|---|---|---|
|
#18+
PPAZeroMQ, А почему эту тему не ведешь в виде отдельного профильного ресурса? заведи свой сайт-блог - контент ведь качественный. а тут ведь затеряется в "мусорных вопросах" если не пинать каждый раз в топ :) Пожалуй, ты прав. Я вот тут : http://www.sql.ru/blogs/blogs.aspx - оставлял заявку, но воз и ныне там. Ну и изначально я не предполагал, что материала будет так много. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2014, 15:10 |
|
||
|
ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).
|
|||
|---|---|---|---|
|
#18+
чччД... Сокеты в Delphi представлены просто указателями (Pointer). А сообщения zmq_msg_t - структурой: Код: pascal 1. 2. 3. ... Ты-дыщь! Начиная с версии 4.1.0, структура zmq_msg_t имеет длину 48 байт! Код: pascal 1. 2. 3. 4. На уровне протоколов обмена данными проблем совместимости "снизу вверх" нет, а на уровне софта - еще как может быть. Вот тут можно взять свежие .dll и .pas. Или работать со старыми (.dll и .pas): см. аттачи к 16751865 и 16751887 соответственно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2014, 22:34 |
|
||
|
ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).
|
|||
|---|---|---|---|
|
#18+
Вычитал про форки этой библиотеки: "Crossroad I/O" (уже вроде умер) и NanoMSG . Форкнул библиотеку Мартин Сюстрик (Martin Su'strik) - один из создателей, с целью: - изменить лицензию использования; - сделать сокеты thread-safe; - расширить режимы работы; - упростить использование; - изменить механизмы использования; - поднять нагрузочную способность; - добавить несколько полезных утилит Хотя одной из задач была сделать библиотеку частью ядра Linux, на страничке загрузки есть версия и для Windows. В составе библиотеки, кроме самой .dll, есть разные утилиты, которые позволяю прямо из командной строки организовать общение с сетью, тестирование, опрос и т.п. API библиотеки существенно похудел. Это просто супер. Больше нет работы с контекстом, а сокеты теперь могут общаться в дополнительных режимах. Например, схема "Издатель - Подписчик" расширена до уровня не просто "Слушайте меня все, кто хочет", а еще: "А ну-ка ответьте мне, мои подписчики...". Забавно, что одним из недостатков ZeroMQ (которое решено в NanoMSG) названа возможность без проблем работать всего () с 10 000 клиентов, а дальше, типа, нужно вызывать процедуры настройки, а еще дальше - глядишь, и ядро придется перекомпилировать... :) ... К сожалению, библиотека NanoMSG пока только в стадии beta. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2014, 07:09 |
|
||
|
ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).
|
|||
|---|---|---|---|
|
#18+
Краткий обзор NanoMSG: https://hguemar.fedorapeople.org/slides/nanomsg/presentation.html ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2014, 07:09 |
|
||
|
ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).
|
|||
|---|---|---|---|
|
#18+
За выходные разобрался с непонятками, исправил ошибки и собрал все здесь: http://delphi-and-zeromq.blogspot.ru/2014/10/zeromq.html ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.11.2014, 07:21 |
|
||
|
ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).
|
|||
|---|---|---|---|
|
#18+
ZeroMQКраткий обзор NanoMSG: https://hguemar.fedorapeople.org/slides/nanomsg/presentation.html NanoMSG под XP не пашет. CancelIoEx используется https://github.com/nanomsg/nanomsg/issues/102 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2014, 09:33 |
|
||
|
ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).
|
|||
|---|---|---|---|
|
#18+
PPAZeroMQКраткий обзор NanoMSG: https://hguemar.fedorapeople.org/slides/nanomsg/presentation.html NanoMSG под XP не пашет. CancelIoEx используется https://github.com/nanomsg/nanomsg/issues/102 Мда. Под Win7 все ОК. libzmq.dll и czmq.dll я старательно под MS VS 2008 компилю, чтобы и на Win 2000 запускалось. Хотя, не пробовал запускать. Надо будет в виртмашине потестить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2014, 10:43 |
|
||
|
ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).
|
|||
|---|---|---|---|
|
#18+
ZeroMQPPAпропущено... NanoMSG под XP не пашет. CancelIoEx используется https://github.com/nanomsg/nanomsg/issues/102 Мда. Под Win7 все ОК. libzmq.dll и czmq.dll я старательно под MS VS 2008 компилю, чтобы и на Win 2000 запускалось. Хотя, не пробовал запускать. Надо будет в виртмашине потестить. Попробовал ZeroMQ на Win2K: фиквам. ZeroMQ: автор--------------------------- Точка входа в процедуру getaddrinfo не найдена в библиотеке DLL WS2_32.dll. --------------------------- Это еще лечится, добавлением в проект одной строчкой Код: plaintext 1. А если использовать czmq.dll, то этого мало, там еще автор--------------------------- Точка входа в процедуру GetAdaptersAddresses не найдена в библиотеке DLL IPHLPAPI.DLL. --------------------------- До WinXP вместо GetAdaptersAddresses использовалась GetAdaptersInfo, функциональности которого, к сожалению, недостаточно. ... Ну и ладно. Пора на XP. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2014, 06:19 |
|
||
|
ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).
|
|||
|---|---|---|---|
|
#18+
ZeroMQ Рабочий пример. Межброкерная маршрутизация. Постановка задачи. Только что нам позвонил лучший клиент и попросил срочно спроектировать мощную систему облачных вычислений. В качестве облака он представляет себе совокупность множества датацентров, каждый кластер клиентов и рабочих которого работают вместе, как единое целое. Для нас такая задача - как два байта переслать. Мы ж дельфисты. Смоделирует эту задачу, используя ZeroMQ . Долго разбирался и портировал примеры на Delphi. Здесь подробный рабочий пример, имитирующий сетевые "кластеры". ... Дальше буду разбираться с обеспечением надежности доставки сообщений. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2014, 04:22 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=38791266&tid=2039957]: |
0ms |
get settings: |
11ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
176ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
57ms |
get tp. blocked users: |
1ms |
| others: | 247ms |
| total: | 525ms |

| 0 / 0 |
