如何监控ZeroMQ服务器是否存在?

2023-12-25

我想在发送 ZeroMQ 请求之前检查服务器的存在(状态),但我不知道该怎么做。


Q : 我想在发送 ZeroMQ 请求之前检查服务器的存在(状态)

解决方案是设置并使用zmq_socket_monitor()

// Read one event off the monitor socket; return value and address
// by reference, if not null, and event number by value. Returns -1
// in case of error.

static int
get_monitor_event ( void  *monitor,
                    int   *value,
                    char **address
                    )
{   
    zmq_msg_t msg;
    zmq_msg_init ( &msg );                                       // First frame in message contains event number and value
    if ( zmq_msg_recv ( &msg, monitor, 0 ) == -1 ) return -1;    // Interrupted, presumably
    assert ( zmq_msg_more ( &msg )              & "REASON: Frame #1 FAILED TO SIG 2nd, EXPECTED, FRAME TO COME" );

    uint8_t  *data  =  ( uint8_t  * ) zmq_msg_data ( &msg );
    uint16_t  event = *( uint16_t * ) ( data );

    if ( value )
        *value = *( uint32_t * ) ( data + 2 );


    zmq_msg_init ( &msg );                                      // Second frame in message contains event address
    if ( zmq_msg_recv ( &msg, monitor, 0 ) == -1 ) return -1;   // Interrupted, presumably
    assert ( !zmq_msg_more ( &msg )             & "REASON: Frame #2 FAILED TO SIG more, NOT EXPECTED, FRAMEs TO COME" );

    if ( address ) {
        uint8_t *data = ( uint8_t * ) zmq_msg_data ( &msg );
        size_t   size =               zmq_msg_size ( &msg );
        *address = ( char * ) malloc ( size + 1 );
        memcpy ( *address, data, size );
        ( *address )[size] = 0;
    }
    return event;
}

int main ( void )
{   
    void    *ctx = zmq_ctx_new ();
    assert ( ctx                                & "REASON: Context FAILED to instantiate" );

    void    *client = zmq_socket ( ctx, ZMQ_DEALER );
    assert ( client                             & "REASON: Socket FAILED to instantiate" );

 // Socket monitoring only works over inproc://
    int      rc = zmq_socket_monitor ( client, "inproc://monitor-client-side", ZMQ_EVENT_ALL );
    assert ( rc == 0                            & "REASON: socket_monitor FAILED to instantiate over INPROC:// transport-class" );

 // Create socket for collecting monitor events
    void    *client_side_mon = zmq_socket ( ctx, ZMQ_PAIR );
    assert ( client_side_mon                    & "REASON: socket_monitor receiving Socket FAILED to instantiate " );

 // Connect these to the inproc endpoints so they'll get events
             rc = zmq_connect ( client_side_mon, "inproc://monitor-client-side" );
    assert ( rc == 0                            & "REASON: .connect()-method FAILED to get connected" );

 // Now do whatever you need
    ...

 // Close client
    close_zero_linger ( client );

 // --------------------------------------------------------------------
 // How to collect and check events from socket_monitor:
    int  event =  get_monitor_event ( client_side_mon, NULL, NULL );

    if ( event == ZMQ_EVENT_CONNECT_DELAYED )
         event =  get_monitor_event ( client_side_mon, NULL, NULL );

    assert ( event == ZMQ_EVENT_CONNECTED       & "REASON: [client]-socket still not in an expected, .connect()-ed, state" );
    ...

    ...
    event = get_monitor_event ( client_side_mon, NULL, NULL );
    assert ( event == ZMQ_EVENT_MONITOR_STOPPED & "REASON: [client]-socket not in an expected, .close()-ed, state" );

 // --------------------------------------------------------------------
 // FINALLY:
 // --------------------------------------------------------------------
 // Close down the sockets
    close_zero_linger ( client_side_mon );

    zmq_ctx_term ( ctx );

    return 0;
    }

( included in API since v3.2+ )

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何监控ZeroMQ服务器是否存在? 的相关文章

  • 使用 gcc 在 Linux 上运行线程构建块 (Intel TBB)

    我正在尝试为线程构建块构建一些测试 不幸的是 我无法配置 tbb 库 链接器找不到库 tbb 我尝试在 bin 目录中运行脚本 但这没有帮助 我什至尝试将库文件移动到 usr local lib 但这又失败了 任何的意见都将会有帮助 确定您
  • 在模板类中声明模板友元类时出现编译器错误

    我一直在尝试实现我自己的链表类以用于教学目的 我在迭代器声明中指定了 List 类作为友元 但它似乎无法编译 这些是我使用过的 3 个类的接口 Node h define null Node
  • 机器Epsilon精度差异

    我正在尝试计算 C 中双精度数和浮点数的机器 epsilon 值 作为学校作业的一部分 我在 Windows 7 64 位中使用 Cygwin 代码如下 include
  • 如何从 Visual Studio 将视图导航到其控制器?

    问题是解决方案资源管理器上有 29 个项目 而且项目同时具有 ASP NET MVC 和 ASP NET Web 表单结构 在MVC部分中 Controller文件夹中有大约100个子文件夹 每个文件夹至少有3 4个控制器 视图完全位于不同
  • C++ 多行字符串原始文字[重复]

    这个问题在这里已经有答案了 我们可以像这样定义一个多行字符串 const char text1 part 1 part 2 part 3 part 4 const char text2 part 1 part 2 part 3 part 4
  • 访问外部窗口句柄

    我当前正在处理的程序有问题 这是由于 vista Windows 7 中增强的安全性引起的 特别是 UIPI 它阻止完整性级别较低的窗口与较高完整性级别的窗口 对话 就我而言 我想告诉具有高完整性级别的窗口进入我们的应用程序 它在 XP 或
  • WcfSvcHost 的跨域异常

    对于另一个跨域问题 我深表歉意 我一整天都在与这个问题作斗争 现在已经到了沸腾的地步 我有一个 Silverlight 应用程序项目 SLApp1 一个用于托管 Silverlight SLApp1 Web 的 Web 项目和 WCF 项目
  • 结构体的内存大小不同?

    为什么第一种情况不是12 测试环境 最新版本的 gcc 和 clang 64 位 Linux struct desc int parts int nr sizeof desc Output 16 struct desc int parts
  • 如何定义一个可结构化绑定的对象的概念?

    我想定义一个concept可以检测类型是否T can be 结构化绑定 or not template
  • x:将 ViewModel 方法绑定到 DataTemplate 内的事件

    我基本上问同样的问题这个人 https stackoverflow com questions 10752448 binding to viewmodels property from a template 但在较新的背景下x Bind V
  • 为什么使用小于 32 位的整数?

    我总是喜欢使用最小尺寸的变量 这样效果就很好 但是如果我使用短字节整数而不是整数 并且内存是 32 位字可寻址 这真的会给我带来好处吗 编译器是否会做一些事情来增强内存使用 对于局部变量 它可能没有多大意义 但是在具有数千甚至数百万项的结构
  • 为什么 isnormal() 说一个值是正常的,而实际上不是?

    include
  • 如何在 Android 中使用 C# 生成的 RSA 公钥?

    我想在无法假定 HTTPS 可用的情况下确保 Android 应用程序和 C ASP NET 服务器之间的消息隐私 我想使用 RSA 来加密 Android 设备首次联系服务器时传输的对称密钥 RSA密钥对已在服务器上生成 私钥保存在服务器
  • 有没有办法让 doxygen 自动处理未记录的 C 代码?

    通常它会忽略未记录的 C 文件 但我想测试 Callgraph 功能 例如 您知道在不更改 C 文件的情况下解决此问题的方法吗 设置变量EXTRACT ALL YES在你的 Doxyfile 中
  • 相当于Linux中的导入库

    在 Windows C 中 当您想要链接 DLL 时 您必须提供导入库 但是在 GNU 构建系统中 当您想要链接 so 文件 相当于 dll 时 您就不需要链接 为什么是这样 是否有等效的 Windows 导入库 注意 我不会谈论在 Win
  • 当文件流没有新数据时如何防止fgets阻塞

    我有一个popen 执行的函数tail f sometextfile 只要文件流中有数据显然我就可以通过fgets 现在 如果没有新数据来自尾部 fgets 挂起 我试过ferror and feof 无济于事 我怎样才能确定fgets 当
  • C# 中最小化字符串长度

    我想减少字符串的长度 喜欢 这串 string foo Lorem ipsum dolor sit amet consectetur adipiscing elit Aenean in vehicula nulla Phasellus li
  • C# 使用“?” if else 语句设置值这叫什么

    嘿 我刚刚看到以下声明 return name null name NA 我只是想知道这在 NET 中叫什么 是吗 代表即然后执行此操作 这是一个俗称的 条件运算符 三元运算符 http en wikipedia org wiki Tern
  • 类型或命名空间“MyNamespace”不存在等

    我有通常的类型或命名空间名称不存在错误 除了我引用了程序集 using 语句没有显示为不正确 并且我引用的类是公共的 事实上 我在不同的解决方案中引用并使用相同的程序集来执行相同的操作 并且效果很好 顺便说一句 这是VS2010 有人有什么
  • 从 mvc 控制器使用 Web api 控制器操作

    我有两个控制器 一个mvc控制器和一个api控制器 它们都在同一个项目中 HomeController Controller DataController ApiController 如果我想从 HomeController 中使用 Dat

随机推荐

  • iOS 提交问题与应用内购买

    我已经上传了包含两次应用内购买的应用程序 4 天后 我收到了此消息和 iTunes Connect 状态 您的应用内购买已被退回 您必须修改或删除突出显示的项目 两项应用内购买均以警告标志突出显示 并表示开发人员需要采取行动 关于问题是什么
  • 如何命名构造函数参数和成员变量?

    我在命名类的内部变量时不使用前缀 我知道有些这样做 但我不会开始 你为什么 辩论 我只是更喜欢这样 问题是有时在构造函数中传递相同的参数 我最终对如何命名它们感到困惑 例如 public class SampleClass private
  • 在 SignalR 中序列化/反序列化派生对象

    我将 SignalR 1 1 与 NET 客户端一起使用 我的集线器中有一个方法 它接受 BaseMessage 类的对象并将其广播给所有客户端 public void SendMessage BaseMessage message Cli
  • Android - 如何在代码中设置首选项

    我有一个 Android 应用程序 其中我的首选项位于 XML 文件中 运行良好 我现在想使用代码设置其中一个首选项 而不是显示整个首选项屏幕 我将如何执行此操作 我假设您所指的首选项是指应用程序的首选项 而不是 Android 手机设置
  • Spring Boot 与 Spring Batch 和 JPA 集成

    我正在将 Spring Boot 项目与 Spring Batch 和 Data jpa 项目集成 与作业和数据配置相关的所有内容都是正确的 除了将我的作业编写器结果保存在数据库中 在我读取文件并处理它之后 我无法将其写入 mysql 数据
  • 将整数拆分为其数字 C++

    我正在尝试自学 C 但遇到了一些障碍 问题是我需要取一个整数 将其拆分为数字并获取数字之和并显示它们 Example 输入号码 123456整数中的数字 1 2 3 4 5 6 sum 21 我已经完成了这一切 但是当我将整数撕成数字时 我
  • 如何在android中隐藏光标的特定行

    我有一个光标 它有 40 行 我想在用户选中复选框时隐藏一些行 一种方法是在游标上再次运行查询 但这对我没有帮助 因为条件是由Java完成的 计算余额 有很多逻辑 我需要一些东西来获取当前行 并返回它是否可以显示 任何帮助将不胜感激 我继承
  • 从 ASP.NET 中的代码隐藏推进向导

    我的页面上有一个向导 它有一个 下一步 按钮 当单击页面上的另一个按钮时 我想从代码隐藏中 单击 该按钮 进一步来说 我的页面上有一个按钮有两个功能 单击它后 在回发中 它要么设置重新加载页面并显示弹出窗口所需的代码 要么在认为不需要弹出窗
  • 如何在sql server中的计算字段上设置外键约束?

    表 A 有一个名为 Computed1 的计算字段 它是persisted并且不为空 此外 它总是计算出 char 50 表达式 它也是唯一的并且具有唯一的键约束 表 B 有一个字段 RefersToCompulated1 它应该引用有效的
  • 是否可以使用VBA添加重复部分内容控制部分?

    我已经创建了Word模板重复部分电流控制 RSCC 含有其他内容控制 我还有 Excel 工作簿 其中包含应转到提到的 Word 模板的信息 我想做的事情是创建宏 该宏将使用 Excel 工作簿中选定行的信息填充 Word 模板 每行到新的
  • 如何同时有效地读取两个 BLE 设备的温度?

    首先 我正在使用RxAndroidBLE http polidea github io RxAndroidBle 管理我的 BLE 连接的库 我有两个我想同时读取两者的温度 例如 我想每 500 毫秒读取两个设备的温度 并将其在两个 Tex
  • 在 Firebase 中查询父节点的所有实例中的特定子节点

    我试图弄清楚如果可能的话如何在 Firebase 中父节点的所有实例中查询专门命名的子节点 可以假设查询的所有父节点中都有这个专门命名的子节点 在这个例子中 uid是每个用户的唯一标识符 我正在尝试获取以下列表displayNames us
  • 可以从 PHP 类中的 include() 文件访问 $this 吗?

    我正在开发一个 WordPress Widget 所有示例都混合有巨大的 HTML PHP 块 因此无法阅读 因此为了尝试清理内容 我想将所有 HTML 渲染移至单独的PHP 文件将是include d 这样做的技巧是 我包含的文件似乎无权
  • 如果 JQuery Mobile 内容溢出,如何通过滚动保持面板高度固定

    我有一个带有固定页眉和固定页脚的页面 内容的高度也固定为窗口的高度 该文档有一个面板 其内容可能会长于窗口 内容的高度 当这种情况发生时 文档的高度就会改变 但我需要在没有滚动条的情况下保持文档的高度固定 面板应该改为滚动条 例子 http
  • ThreadPool不按顺序运行任务

    我正在使用Executor具体框架Executors newCachedThreadPool 我有一个清单Runnable例如100 前 50 个每个创建一个值 存储在列表中 以供后 50 个使用 我想如果我通过了Runnable是在exe
  • 尝试在 Ubuntu 16.04 下运行 asp .net core 应用程序时出现 core-dump 错误

    我正在尝试在 Ubuntu 16 04 下将我的 asp net core 应用程序作为服务运行 我创建了以下服务配置this https learn microsoft com pl pl aspnet core host and dep
  • javac 错误消息不显示整个文件路径

    使用 javac 或 ant 任务 时 错误消息不包括整个文件路径 它只包括文件名 例如 javac src path to Filename java Filename java 1 package foo bar does not ex
  • 将 python 对象转换为 rpy2

    以下代码应该在 rpy2 中创建热图 import numpy as np from rpy2 robjects import r data np random random 10 10 r heatmap data 但是 它会导致以下错误
  • 在 Swift 中找不到源文件

    我正在尝试创建一个 Cocoapod 我使用了他们网站上列出的步骤来执行此操作 但是 现在我正在尝试创建示例应用程序 但遇到了问题 它找到并自动完成模块 但是对于我在类中定义的任何内容 它都显示 未定义类型 Podfile Podspec
  • 如何监控ZeroMQ服务器是否存在?

    我想在发送 ZeroMQ 请求之前检查服务器的存在 状态 但我不知道该怎么做 Q 我想在发送 ZeroMQ 请求之前检查服务器的存在 状态 解决方案是设置并使用zmq socket monitor Read one event off th