|
|
|
ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).
|
|||
|---|---|---|---|
|
#18+
Dima T, А у вас ZMQ_CLIENT будет на винде? он ведь XP не поддерживает - это на всегда или временно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2016, 17:22 |
|
||
|
ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).
|
|||
|---|---|---|---|
|
#18+
PPADima T, А у вас ZMQ_CLIENT будет на винде? он ведь XP не поддерживает - это на всегда или временно? Откуда инфа? На XP пока не тестил, но надо будет, без XP оно вообще не надо. Есть проблемы c компиляцией libzmq.dll в режиме совместимости с XP. Просто не компилируется с ключем /MT. Пока не разбирался, но думаю решаемо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2016, 18:49 |
|
||
|
ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).
|
|||
|---|---|---|---|
|
#18+
Есть там засады. Связанное с IPv6 как понял отключается дефайном ZMQ_HAVE_WINDOWS_TARGET_XP. Но не все отключается. Они там местами используют WinAPI от Windows Vista+, например SleepConditionVariableCS() это лечить надо переписыванием кода, ConditionVariable есть в С++ 11, попробую заменить на них, может получится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2016, 19:30 |
|
||
|
ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).
|
|||
|---|---|---|---|
|
#18+
Неприятно, но не смертельно. В крайнем случае можно вернуться к DILLER-ROUTER и более старой версии работающей в XP, все равно на верхнем уровне я закладываюсь на возможные потери важных сообщений. А так да, главная засада опенсорца - игнорирование старых ОС, да и железа тоже. Пытался ставить линукс на не очень старенький ноут с Pentium M, получал ответ "процессор не поддерживает PAE", может путаю, не PAE а что-то похожее, но суть в том что интел конкретно из этого проца убрал то что было и в более ранних мобильных и в десктоп аналогах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2016, 19:48 |
|
||
|
ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).
|
|||
|---|---|---|---|
|
#18+
Dima T, Иногда это по ошибке делается - разработчики сидят на i7 :) я вот у себя в опенсорс-проекте добавил libtorrent и не знал, что если VC++ 2015 не указан тип оптимизации она автоматом собирается с SSE2! и через день после обновления версии получил письмо: Флай 19969 падает при загрузке, SSE2 команды... Откатился на 19935. AMD Duron. 1.2 ГГц. 512 Мб. а поддержка XP для пользователей пока еще очень актуальна - особенно в отдаленных уголках России. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2016, 23:08 |
|
||
|
ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).
|
|||
|---|---|---|---|
|
#18+
PPAя вот у себя в опенсорс-проекте добавил libtorrent и не знал, что если VC++ 2015 не указан тип оптимизации она автоматом собирается с SSE2! Наступал на эти грабли недавно 18816450 . Хуже всего что с запретом SSE2 невозможно скомпилировать в 2015. Пришлось тогда вернуться на MSVC 6. В данном случае можно пожертвовать владельцами антикварного железа. PPAа поддержка XP для пользователей пока еще очень актуальна - особенно в отдаленных уголках России. Кроме того есть еще продвинутые линуксоиды, Wine эмулирует XP, а как там с более поздним WinAPI - большой вопрос. Попробую поизучать исходники. Из нового кроме сокетов ZMQ_CLIENT еще много чего добавилось, например zmq_atomic_*() Может несовместимые нововведения не касаются ZMQ_CLIENT, тогда есть шанс просто исключить вызовы WinAPI отсутствующего в XP. Попробую тупо позаменять несовместимое на MessageBox(). Что получится - напишу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2016, 09:39 |
|
||
|
ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).
|
|||
|---|---|---|---|
|
#18+
Оказалось не все так просто. Переписал. Даже быстрее стало работать. Под XP запускается, но иногда затыкается при больших нагрузках. Тут топик поднял по этому поводу. Есть еще вторая проблема - не компилируется как static. Надо рантайм VS2015. Думаю решаемо, но сначала надо с зависаниями разобраться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2016, 17:18 |
|
||
|
ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).
|
|||
|---|---|---|---|
|
#18+
Переделал код под XP. Мой тест стал быстрее: 2.4 сек. против 4.3 сек с родным кодом. Инструкция по правке проекта для MSVC2015: В свойствах проекта libzmq поменять: Platform toolset: v140_xp C/C++ - Preprocessor – Preprocessor definition добавить ZMQ_HAVE_WINDOWS_TARGET_XP; {то что было} Правки в коде: tcp_address.cpp строка 248 Код: plaintext 1. заменить на Код: plaintext 1. 2. 3. condition_variable.hppЗаменить класс condition_variable_t на этот Код: 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. 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. или отдельно прописать каждую замену. Структура такая: Код: plaintext 1. 2. 3. 4. 5. Остался вопрос со static сборкой, чтобы рантайм MSVC2015 не ставить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2016, 16:28 |
|
||
|
ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).
|
|||
|---|---|---|---|
|
#18+
Собрал static. Не надо никаких рантаймов. Под XP работает. Для желающих повторить: скачать исходники , просто распаковать архив в корневую папку (не уверен что вечно будет работать замена файлов исходников) и скомпилировать в VC2015 проект из папки libzmq_VC2015. Хотел готовую DLL выложить, но сюда не лезет, она 0,5 Мб (0,3 в архиве) PS Там стандартное ограничение на 64 соединения, т.к. используется select(). Думаю этого достаточно для клиента. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2016, 20:59 |
|
||
|
ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).
|
|||
|---|---|---|---|
|
#18+
Dima TПоизучал что реально происходит в inproc - пришел к выводу что не надо никаких указателей для inproc соединений, там и так указатели передаются. Точнее если сообщение маленькое (5 байт например), то само сообщение, если большое (100 байт пробовал), то указатель, а содержимое сообщения остается в памяти там же где и было. Т.е. ZMQ сама отлично решает как быстрее доставить. Итого: сообщение можно принимать с TCP соединения и сразу отправлять в inproc очередь на обработку без какого-либо шаманства. ... Ага, тоже вовсю inproc использую, даже для простых случаев многонитевого приложения: очень удобно и быстро. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2016, 01:34 |
|
||
|
ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).
|
|||
|---|---|---|---|
|
#18+
Dima TЕсть там засады. Связанное с IPv6 как понял отключается дефайном ZMQ_HAVE_WINDOWS_TARGET_XP. Но не все отключается. Они там местами используют WinAPI от Windows Vista+, например SleepConditionVariableCS() это лечить надо переписыванием кода, ConditionVariable есть в С++ 11, попробую заменить на них, может получится. А я просто не самую новую версию libzmq использую. Ибо поддержка WinXP еще очень важна. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2016, 01:36 |
|
||
|
ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).
|
|||
|---|---|---|---|
|
#18+
Dima TСобрал static. Не надо никаких рантаймов. Под XP работает. Для желающих повторить: скачать исходники , просто распаковать архив в корневую папку (не уверен что вечно будет работать замена файлов исходников) и скомпилировать в VC2015 проект из папки libzmq_VC2015. Хотел готовую DLL выложить, но сюда не лезет, она 0,5 Мб (0,3 в архиве) PS Там стандартное ограничение на 64 соединения, т.к. используется select(). Думаю этого достаточно для клиента. Ух ты, класс! Надо на всякий случай перешерстить интерфейсы, для Delphi - биндинга... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2016, 01:39 |
|
||
|
ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2016, 08:12 |
|
||
|
ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).
|
|||
|---|---|---|---|
|
#18+
Товарищ младший сержантНадо на всякий случай перешерстить интерфейсы, для Delphi - биндинга... Как минимум добавить вызовы zmq_msg_routing_id() и zmq_msg_set_routing_id() У сокета ZMQ_SERVER другая логика работы (по сравнению с ZMQ_ROUTER), он каждому клиентскому соединению присваивает routing_id (по сути ID соединения) и его надо явно указывать если с нуля генеришь сообщение. В моих примерах этого не видно, т.к. я обратно отправляю исходное сообщение, а там уже изначально стоит routing_id. Пока не нашел ответа на вопрос: Надо ли на клиенте явно подставлять routing_id? Пока не разбирался, надо будет потестить что происходит при обрыве TCP-соединения и реконнекте. Еще большой плюс ZMQ_CLIENT-ZMQ_SERVER в том что сообщения не теряются. Например если ZMQ_DEALER установил соединение, затем отправил, затем стартанул ZMQ_ROUTER, то ZMQ_ROUTER ничего не получит, а ZMQ_SERVER - получит. ZMQ_CLIENT блокируется при отправке если сообщение не влазит в буфер отправки, ZMQ_SERVER в таком случае получает ошибку при отправке. И про 64 соединения уточню: это 64 TCP соединения , можно увеличить, задав нужный FD_SETSIZE перед #include Winsock2.h в файле windows.hpp Код: plaintext 1. 2. 3. Добавили группу функций zmq_atomic_counter_*() как понимаю это потокобезопасные счетчики. Не знаю нужны ли они в дельфи, а мне не актуально, в С/С++ есть std::atomic<> В zmq.h есть какие-то zmq_msg_group() и zmq_msg_set_group(), но описаловки по ним никакой не нашел. Может в будущем напишут зачем они. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2016, 08:14 |
|
||
|
ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).
|
|||
|---|---|---|---|
|
#18+
PPADima T, А PR в upstream не планируешь послать? https://github.com/zeromq/libzmq/pulls Попробую. С английским у меня все плохо. Читать немного получается, а написать - засада. Поймут ли автоперевод? Если найдутся желающие написать за меня - я не против. Надо им заслать только то что добавить в код, написано тут 19839048 . Мой проект для МС2015 наверно не стоит туда слать, т.к. делал его лишь бы скомпилировалось. По хорошему сборку под XP впилить отдельным пунктом в имеющийся у них проект. В тюнинге проектов MSVC я не спец. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2016, 08:31 |
|
||
|
ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).
|
|||
|---|---|---|---|
|
#18+
PPADima T, А PR в upstream не планируешь послать? https://github.com/zeromq/libzmq/pulls Отправил. Приняли. Можете пользоваться. Проект для сборки . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2016, 15:17 |
|
||
|
ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).
|
|||
|---|---|---|---|
|
#18+
[quot Dima T]PPADima T, Отправил. Приняли. Можете пользоваться. Круто. спасибо! на выходных протестирую. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2016, 18:28 |
|
||
|
ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).
|
|||
|---|---|---|---|
|
#18+
Dima TPPADima T, А PR в upstream не планируешь послать? https://github.com/zeromq/libzmq/pulls Отправил. Приняли. Можете пользоваться. Проект для сборки . А ты czmq - используешь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2016, 00:00 |
|
||
|
ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).
|
|||
|---|---|---|---|
|
#18+
чччДА ты czmq - используешь? Нет, свою обертку написал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2016, 13:20 |
|
||
|
ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).
|
|||
|---|---|---|---|
|
#18+
Dima TчччДА ты czmq - используешь? Нет, свою обертку написал. Пожалуй, мудрое решение. Куда быстрее было сделать то, что нужно именно тебе на основе ядра, чем разбираться с тем, что кто-то делал "под себя". ... Я довольно долго разбирался с функционалом czmq, в итоге в реальных приложениях использую очень малое подмножество методов czmq, думаю, что их можно было достаточно быстро реализовать средствами Delphi. Ядро (libzmq) обычно собирается без проблем, или с минимальным стуком в бубен, а в совокупности с czmq (и с libsodium) часто уже приходится париться: то под новую версию MS VS что-то не собирается, то что-то исключили из поддержки, то еще что... Плюс поддерживать согласованный биндинг в актуальном состоянии для двух библиотек напряжней, чем для одной. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2016, 23:13 |
|
||
|
ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).
|
|||
|---|---|---|---|
|
#18+
чччДКуда быстрее было сделать то, что нужно именно тебе на основе ядра, чем разбираться с тем, что кто-то делал "под себя". Я так понимаю в czmq кроме самого ZMQ дополнительно собран попутно используемый функционал, который приведен к кроссплатформенному виду. Работа с потоками, файловой системой, временем и т.д. Лично мне было интересно все что связано с многопоточностью, т.к. в виндовсе и линуксе все по разному. Но сегодня это не актуально, т.к. в С++11 добавили все связанное с многопоточностью. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2016, 09:28 |
|
||
|
ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).
|
|||
|---|---|---|---|
|
#18+
С libsodium тоже не стал разбираться. Не настолько важная инфа у меня чтобы усложнять работу стойким шифрованием. Сделал самодельный Диффи-Хеллман для обмена ключами (64 бита) и CBC шифрование. Плюс CRC32 в начало сообщения, чтобы данные окончательно перемешались после шифрования. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2016, 10:03 |
|
||
|
ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).
|
|||
|---|---|---|---|
|
#18+
Dima TС libsodium тоже не стал разбираться. Не настолько важная инфа у меня чтобы усложнять работу стойким шифрованием. Сделал самодельный Диффи-Хеллман для обмена ключами (64 бита) и CBC шифрование. Плюс CRC32 в начало сообщения, чтобы данные окончательно перемешались после шифрования. Мда... "фантазией они не отличались" - (с). В смысле - все как у меня, почти. :) Плюс я еще подписываю блок с помощью аппаратно-реализованного ECC (с использованием Guardant Sign) ... Насчет CRC32 в качестве "соли" - не очень хорошо. Ибо значение CRC32 постоянно для неизменного блока данных. Таким образом, один и тот же блок данных после зашифрования одним и тем же ключом будет выглядеть одинаково, что снижают стойкость криптосистемы. ... В начале обычно втыкают блок случайных данных. Например, размером, равным ключу шифрования. Этим блоком шифруют сообщение, а сам блок шифруют сеансовым ключом, сгенерированным по алгоритму Д-Х. Таким образом, зашифрованные данные получаются всегда разными, даже если шифруются одинаковые блоки (даже в случае не-ECB режима шифрования). ... Впрочем, не госсекреты ведь мы защищаем, а с хакерами боремся. ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2016, 13:53 |
|
||
|
ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).
|
|||
|---|---|---|---|
|
#18+
чччДНасчет CRC32 в качестве "соли" - не очень хорошо. Ибо значение CRC32 постоянно для неизменного блока данных. Таким образом, один и тот же блок данных после зашифрования одним и тем же ключом будет выглядеть одинаково, что снижают стойкость криптосистемы. Повторений у меня нет, т.к. внутри еще номер сообщения идет (счетчик на стороне отправителя), для ответов используется. CRC32 удобно, т.к. одновременно и соль и подпись/контрольная сумма для проверки корректности принятого. Считается быстро и места немного занимает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2016, 14:45 |
|
||
|
ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).
|
|||
|---|---|---|---|
|
#18+
Dima TчччДНасчет CRC32 в качестве "соли" - не очень хорошо. Ибо значение CRC32 постоянно для неизменного блока данных. Таким образом, один и тот же блок данных после зашифрования одним и тем же ключом будет выглядеть одинаково, что снижают стойкость криптосистемы. Повторений у меня нет, т.к. внутри еще номер сообщения идет (счетчик на стороне отправителя), для ответов используется. CRC32 удобно, т.к. одновременно и соль и подпись/контрольная сумма для проверки корректности принятого. Считается быстро и места немного занимает. ОК, все зависит от задачи. К примеру, у меня на основе zmq реализовано общение с сервером защиты. Трафик невелик. В данном случае обеспечение неповторяемости данных в трафике - вещь обязательная, для защиты от табличной эмуляции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2016, 14:51 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39336633&tid=2039957]: |
0ms |
get settings: |
8ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
155ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
78ms |
get tp. blocked users: |
1ms |
| others: | 218ms |
| total: | 494ms |

| 0 / 0 |
