|
|
|
ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).
|
|||
|---|---|---|---|
|
#18+
В Windows 8.1 "искаропки" интерфейса DirectPlay не оказалось. А в Windows 7 "искаропки" он ещё есть ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2016, 13:50 |
|
||
|
ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).
|
|||
|---|---|---|---|
|
#18+
defecatorА в Windows 7 "искаропки" он ещё есть Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2016, 13:59 |
|
||
|
ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).
|
|||
|---|---|---|---|
|
#18+
А то будет потом как с RedAlert - поставьте тот компонент, настройте протокол IPX ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2016, 14:00 |
|
||
|
ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).
|
|||
|---|---|---|---|
|
#18+
Feg16defecatorА в Windows 7 "искаропки" он ещё есть Код: plaintext какие тонкие нюхательные ощущения, я поражаюсь. А с древним кодом нет, не работал никогда ? Тошнило тебя ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2016, 14:01 |
|
||
|
ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).
|
|||
|---|---|---|---|
|
#18+
defecatorА с древним кодом нет, не работал никогда ? Тошнило тебя ?Одно дело пилить на дядю говнокод на практике, а второе заменять один движок на другой. Смысл мне ставить раком проект, если он у пользователей попросту не станет работать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2016, 16:28 |
|
||
|
ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).
|
|||
|---|---|---|---|
|
#18+
ZeroMQ Особенности High-level API CZMQ : Автоматизация обслуживания сокетов. К примеру, при закрытии контекста все его сокеты обработка будут также закрываться. При этом в некоторых случаях для сокетов можно назначить таймайт. ... Интересно: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. zthread_fork создает и запускает "прикрепленную нить", фактически запуская cdecl - функцию типа zthread_attached_fn и автоматически создавая пару сокетов для общения с нитью, как и сказано в описании выше. Так вот, контекст ZMQ (параметр ctx: p_zctx_t) не просто передается, а создается его копия в блоке данных нити. В рамках нового контекста в нити и будет создаваться новый пул сокетов и связанных с ними коннектов, очередей и т.п. Т.е., по завершении нити произойдет корректная финализация копии контекста и связанных с ним сокетов и проч. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2016, 14:22 |
|
||
|
ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).
|
|||
|---|---|---|---|
|
#18+
чччД, с аутентификацией не разбирался? В тестах есть пример , но слишком простой. С сервером понятно, непонятно как узнать клиенту что у него "Invalid username or password"? На клиенте libzmq.dll получает "400", рвет соединение, больше его не пытается установить, но наружу никак это не сообщает. Снаружи мой код работает как будто все хорошо. zmq_send() отправляет, zmq_recv() висит в ожидании приема. Нагуглил это , вроде тот же вопрос, но мало что там понял, у меня с английским не очень хорошо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2016, 17:37 |
|
||
|
ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).
|
|||
|---|---|---|---|
|
#18+
Может кому пригодиться. Все что нарыл - это включить мониторинг ( zmq_socket_monitor () ) и анализировать что будет после ZMQ_EVENT_DISCONNECTED, если после попытки установить соединение прекратятся, то считаем что сервер прислал команду отключиться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2016, 16:17 |
|
||
|
ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).
|
|||
|---|---|---|---|
|
#18+
Dima T, выстраивая свой протокол, я сделал так, что в момент handshake клиент передает серверу свои текстовые идентификационные данные (имя компа, юзернэйм windows и т.п.) в отдельном фрейме. А после handshake, обменявшись открытыми ключами для шифрования (алг. Диффи-Хеллмана), в целях экономии трафика использую собственный открытый Д-Х ключ заодно и как 8-байтный UID для identity коннекта. Сервер кэширует UID'ы и хранит их в течении заданного времени (5 сек без активности -> "свободен!). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2016, 16:46 |
|
||
|
ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).
|
|||
|---|---|---|---|
|
#18+
Т.е., аутентификацией на сервере занимаюсь я сам. Что удобно и позволяет выстраивать различные, удобные для моей левой пятки схемы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2016, 16:49 |
|
||
|
ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).
|
|||
|---|---|---|---|
|
#18+
Схема примерно вот такая. Клиент получает от сервера сообщения: - хартбит - посылается периодически, чтобы клиент знал: сервер жив; - запрос выполнен - успешный ответ сервера на любой запрос клиента (кроме запроса "гуд бай, сервер!"). - запрос об идентификации - ответ сервера на любой запрос, когда сервер не знает о данном identity ничего, клиент должен представиться; Сервер получает запросы от клиента: - хартбит - посылается периодически, чтобы сервер знал: клиент жив. - запрос - посылается клиентом по мере надобности. - запрос с блоком идентификации (высылается на запрос сервера). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2016, 17:12 |
|
||
|
ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).
|
|||
|---|---|---|---|
|
#18+
чччД, я вот одного не понял, если что бы получить сообщение нужно сперва выделить под него память где тогда асинхронность? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2016, 12:55 |
|
||
|
ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)чччД, я вот одного не понял, если что бы получить сообщение нужно сперва выделить под него память где тогда асинхронность? Нет, конечно. Не обязательно. Используй zmq_msg_recv() : длина_сообщения := zmq_msg_recv(сокет, сообщение, флаги); Если длина_сообщения >= 0, значит, все ОК. А данные после приема можно получить вот так: zmq_msg_data (fMessage). А асинхронность - в поллинге: http://delphi-and-zeromq.blogspot.ru/2014/11/05-zeromq-zmqpoll.html ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2016, 13:35 |
|
||
|
ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).
|
|||
|---|---|---|---|
|
#18+
чччДТ.е., аутентификацией на сервере занимаюсь я сам. Что удобно и позволяет выстраивать различные, удобные для моей левой пятки схемы. Тоже склоняюсь к самодельной аутентификации. Свой протокол это хорошо, возможно даже лучше для безопасности чем встроенный, т.к. можно всунуть перехват zmq_setsockopt() установки логина/пароля и готово. Или трафик послушать. В PLAIN режиме оно открытым текстом идет. Единственный плюс встроенной что сервер рвет соединение если зацепились вовсе не не через ZMQ, если встроеная отключена - не рвет, просто не отвечает. Еще встроенная показывает IP откуда коннект, без нее можно через монитор попробовать сопоставить. Я не определился, нужен ли вообще мне этот IP или без него проживу. Хочу задействовать новые сокеты ZMQ_CLIENT, ZMQ_SERVER. Управление идентификацией гибче чем с DILLER-ROUTER. И побыстрее должно работать теоретически, т.к. маршрутизация по ID сессии (int32), а не по имени клиента (строка произвольной длины) Смущает что они подключаются по Код: plaintext 1. т.е. вроде как еще в варианте черновика. Есть опыт использования? Не глючат? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2016, 14:40 |
|
||
|
ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).
|
|||
|---|---|---|---|
|
#18+
Dima T... Хочу задействовать новые сокеты ZMQ_CLIENT, ZMQ_SERVER... [/src] т.е. вроде как еще в варианте черновика. Есть опыт использования? Не глючат? Не пользовался пока, чуть-чуть почитал только. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2016, 15:12 |
|
||
|
ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).
|
|||
|---|---|---|---|
|
#18+
чччД, нда, не густо - нулевая обёртка над апи практически ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2016, 21:45 |
|
||
|
ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).
|
|||
|---|---|---|---|
|
#18+
чччД, всё больше склоняюсь, что вот такой подход более практичен и в плане результата и в плане лёгкости разработки. ещё бы для асинхронных операций чтения память выделять когда она требуется, а не заранее - тогда наверное можно и с классическим пулингом посостязаться по затратам ресурсов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2016, 22:11 |
|
||
|
ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)чччД, нда, не густо - нулевая обёртка над апи практически Где нулевая обертка над апи? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2016, 23:59 |
|
||
|
ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).
|
|||
|---|---|---|---|
|
#18+
Товарищ младший сержантkealon(Ruslan)чччД, нда, не густо - нулевая обёртка над апи практически Где нулевая обертка над апи? чччДА асинхронность - в поллинге: http://delphi-and-zeromq.blogspot.ru/2014/11/05-zeromq-zmqpoll.html Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2016, 07:02 |
|
||
|
ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)чччД, всё больше склоняюсь, что вот такой подход более практичен и в плане результата и в плане лёгкости разработки. ХЗ что проще. Ниже код сервера с многопоточной обработкой, букав поменьше и нет необходимости синхронизации доступа к очереди на обработку. kealon(Ruslan)ещё бы для асинхронных операций чтения память выделять когда она требуется, а не заранее - тогда наверное можно и с классическим пулингом посостязаться по затратам ресурсов zmq_msg_recv() выделяет ровно столько сколько надо по приходу сообщения. Многопоточный эхо-серверСообщения принимаются и раздаются трем потокам на обработку. Код: plaintext 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. Для переделки в полноценный сервер просто дописать поток обработки worker(). Провел небольшой тест на скорость. Клиент открывает 1000 соединений к серверу и в каждое шлет 100 запросов. Соединение через 127.0.0.1. Проц i7 4 ядра. Win10 СоединенийВремя мсСкорость запрос/секПамять сервера Мб10004 82820 70038 Мб300023 57012 700122 Мбв состоянии простоя (без соединений) память, используемая сервером, 5-6 Мб. код клиента Код: plaintext 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2016, 09:10 |
|
||
|
ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).
|
|||
|---|---|---|---|
|
#18+
Перемудрил я в коде сервера с указателями и похоже утечка памяти есть. Надо передавать содержимое zmq_msg_t, это как понимаю структура-заголовок (64 байта) где все ссылки на данные сообщения. Переделал, немного побыстрее стало. Сервер при простое занимает 2-3 Мб памяти. исходник Код: plaintext 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2016, 10:08 |
|
||
|
ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)я вот одного не понял, если что бы получить сообщение нужно сперва выделить под него память где тогда асинхронность? ИМХУ ты тут теплое с мягким в кучу замешал. Асинхронность это алгоритмический подход, несинхронно, т.е. не ждать выполнения каждого шага, т.е. дал команду сделать то-то до тогда-то и забыл. Получил ответ "то-то сделано", запустил следующее, истек таймаут "тогда-то наступило и ничего не сделано", повторил команду "сделать то-то" или еще какие действия. А когда выделилась память - пофиг. Мысли ширше или ширее ))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2016, 20:07 |
|
||
|
ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).
|
|||
|---|---|---|---|
|
#18+
Dima Tkealon(Ruslan)я вот одного не понял, если что бы получить сообщение нужно сперва выделить под него память где тогда асинхронность? ИМХУ ты тут теплое с мягким в кучу замешал. Асинхронность это алгоритмический подход, несинхронно, т.е. не ждать выполнения каждого шага, т.е. дал команду сделать то-то до тогда-то и забыл. Получил ответ "то-то сделано", запустил следующее, истек таймаут "тогда-то наступило и ничего не сделано", повторил команду "сделать то-то" или еще какие действия. А когда выделилась память - пофиг. Мысли ширше или ширее ))) ага, коревато, но ты же понял, что я хотел спросить :-) Dima Tkealon(Ruslan)чччД, всё больше склоняюсь, что вот такой подход более практичен и в плане результата и в плане лёгкости разработки. ХЗ что проще. Ниже код сервера с многопоточной обработкой, букав поменьше и нет необходимости синхронизации доступа к очереди на обработку. kealon(Ruslan)ещё бы для асинхронных операций чтения память выделять когда она требуется, а не заранее - тогда наверное можно и с классическим пулингом посостязаться по затратам ресурсов zmq_msg_recv() выделяет ровно столько сколько надо по приходу сообщения. пример зачётный, именно то, что хотел к твоему примеру очень неплохо должно ложиться, то что описано в статье PS: мда, что-то слишком много вокруг этих корутин последнее время крутится, случайности неслучайны... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2016, 22:28 |
|
||
|
ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)PS: мда, что-то слишком много вокруг этих корутин последнее время крутится, случайности неслучайны... ИМХУ это просто удобный синтаксис. Адаптированный к асинхронным алгоритмам. Нынче повышение производительности железа де факто остановилось для синхронных алгоритмов, т.е. производительность одного ядра не меняется, а дополнительные ядра пользы не дают. Поэтому все направились на смену подходов, чтобы хоть как-то эти ядра хоть чем-то загрузить. Плюс сетевого взаимодействия стало больше. А дальше возникает проблема удобства разработки и отладки, т.к. асинхронные алгоритмы в разы сложнее чем синхронные аналоги. Например в C# много в эту сторону наработано: await/async, встроенный пул потоков, асинхронная модель на основе задач (TAP) и т.д. Все это создано в т.ч. чтобы убрать асинхронные сложности от глаз разработчика. Там где подобного нет: один из вариантов - очереди сообщений, ZeroMQ тут очень даже в тему, особенно если требуется работа по сети. PS Во втором варианте с копированием zmq_msg_t я тоже накосячил. Разработчики не советуют туда лезть напрямую. Во всех описаниях функций zmq_msg_*() пишутNever access zmq_msg_t members directly, instead always use the zmq_msg family of functions. Поправил так Код: plaintext 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2016, 08:04 |
|
||
|
ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).
|
|||
|---|---|---|---|
|
#18+
Поизучал что реально происходит в inproc - пришел к выводу что не надо никаких указателей для inproc соединений, там и так указатели передаются. Точнее если сообщение маленькое (5 байт например), то само сообщение, если большое (100 байт пробовал), то указатель, а содержимое сообщения остается в памяти там же где и было. Т.е. ZMQ сама отлично решает как быстрее доставить. Итого: сообщение можно принимать с TCP соединения и сразу отправлять в inproc очередь на обработку без какого-либо шаманства. Код сервера стал меньше, понятнее и быстрее на 5% Код: plaintext 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2016, 07:59 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39200795&tid=2039957]: |
0ms |
get settings: |
6ms |
get forum list: |
8ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
153ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
44ms |
get tp. blocked users: |
1ms |
| others: | 218ms |
| total: | 442ms |

| 0 / 0 |
