ZeroMQ API(二) 上下文

1、创建上下文

1.1 zmq_ctx_new(3)

1.1.1 名称

  zmq_ctx_new - 创建新的ZMQ上下文

1.1.2 概要

  void * zmq_ctx_new();

1.1.3 描述

  zmq_ctx_new()函数创建一个新的?MQ上下文。该函数替换弃用函数zmq_init(3)。

1.1.4 线程安全

  ZMQ上下文是线程安全的,可以根据需要在尽可能多的应用程序线程中共享,而不需要调用者需要额外的锁定。

1.1.5 返回值

  如果成功,zmq_ctx_new()函数将返回一个不透明的句柄给新创建的上下文。 创建失败返回NULL。

1.1.6 错误

  没有为此功能定义错误值。

1.2 zmq_init(废弃)

1.2.1 名称

  zmq_init - 初始化ZMQ上下文

1.2.2 概要

  void * zmq_init(int io_threads);

1.2.3 描述

  zmq_init()函数初始化一个?MQ上下文。io_threads参数指定处理I / O操作的?MQ线程池的大小。 如果您的应用程序仅使用inproc传输进行消息传递,则可以将其设置为零,否则将其设置为至少一个。

1.2.4 线程安全

  ZMQ上下文是线程安全的,可以根据需要在尽可能多的应用程序线程中共享,而不需要调用者需要额外的锁定。该功能已被zmq_ctx_new(3)弃用。

1.2.5 返回值

  如果成功,zmq_init()函数将返回一个不透明的句柄给初始化的上下文。 否则它将返回NULL并将errno设置为下面定义的值之一。

1.2.6 错误

  EINVAL:请求了一个无效数量的io_threads。

2、获取/设置上下文属性

2.1 zmq_ctx_set(3)

2.1.1 名称

  zmq_ctx_set - 设置上下文选项

2.1.2 概要

  int zmq_ctx_set(void * context,int option_name,int option_value);

2.1.3 描述

  zmq_ctx_set()函数应将option_name参数指定的选项设置为option_value参数的值。

  zmq_ctx_set()函数接受以下选项:

    ZMQ_IO_THREADS:设置I / O线程的数量,ZMQ_IO_THREADS参数指定用于处理I/ O操作的?MQ线程池的大小。如果您的应用程序仅使用inproc传输进行消息传递,则可以将其设置为零,否则将其设置为至少一个。此选项仅适用于在上下文中创建任何套接字之前。默认值1。
    ZMQ_THREAD_SCHED_POLICY:为I / O线程设置调度策略,ZMQ_THREAD_SCHED_POLICY参数为内部上下文的线程池设置调度策略。该选项在Windows上不可用。该选项支持的值可以在sched.h文件中找到,或者在http://man7.org/linux/man-  pages/man2/sched_setscheduler.2.html中找到。此选项仅适用于在上下文中创建任何套接字之前。默认值-1。
    ZMQ_THREAD_PRIORITY:设置I / O线程的调度优先级,ZMQ_THREAD_PRIORITY参数为内部上下文的线程池设置调度优先级。该选项在Windows上不可用。此选项支持的值取决于选定的调度策略。详细信息可以在sched.h文件或http://man7.org/linux/man-pages/man2/sched_setscheduler.2.html中找到。此选项仅适用于在上下文中创建任何套接字之前。默认值-1。
    ZMQ_MAX_SOCKETS:设置套接字的最大数量,ZMQ_MAX_SOCKETS参数设置上下文允许的最大套接字数量。您可以使用ZMQ_SOCKET_LIMIT选项通过zmq_ctx_get(3)查询最大允许值。默认值1024。
    ZMQ_IPV6:设置IPv6选项,ZMQ_IPV6参数设置从此时起在上下文中创建的所有套接字的IPv6值。值1表示启用IPv6,而0表示套接字将仅使用IPv4。当启用IPv6时,套接字将连接到IPv4或IPv6主机,或者接受来自IPv4和IPv6主机的连接。默认值为0。

2.1.4 返回值

  如果成功,zmq_ctx_set()函数将返回零。否则它返回-1并将errno设置为下面定义的值之一。

2.1.5 错误

  EINVAL:请求的选项option_name未知。

2.2 zmq_ctx_get(3)

2.2.1 名称

  zmq_ctx_get - 获取上下文选项

2.2.2 概要

  int zmq_ctx_get(void * context,int option_name)

2.2.3 描述

  zmq_ctx_get()函数将返回option_name参数指定的选项。

  zmq_ctx_get()函数接受以下选项名称:

    ZMQ_IO_THREADS:获取I / O线程的数量,ZMQ_IO_THREADS参数返回此上下文的?MQ线程池的大小。
    ZMQ_MAX_SOCKETS:获取最大数量的套接字,ZMQ_MAX_SOCKETS参数返回此上下文允许的最大套接字数量。
    ZMQ_SOCKET_LIMIT:获取最大的可配置套接字数量,ZMQ_SOCKET_LIMIT参数返回zmq_ctx_set(3)将接受的最大数量的套接字。
    ZMQ_IPV6:设置IPv6选项,ZMQ_IPV6参数返回上下文的IPv6选项。

2.2.4 返回值

  如果成功,zmq_ctx_get()函数返回值为0或更大的值。 否则它返回-1并将errno设置为下面定义的值之一。

2.2.5 错误

  EINVAL:请求的选项option_name未知。

3、销毁上下文

3.1 zmq_ctx_shutdown(3)

3.1.1 名称

  zmq_ctx_shutdown - 关闭ZMQ上下文

3.1.2 概要

  int zmq_ctx_shutdown(void * context);

3.1.3 描述

  zmq_ctx_shutdown()函数将关闭?MQ上下文上下文。上下文关闭会导致上下文中打开的套接字上当前正在进行的任何阻塞操作立即返回错误代码为ETERM的内容。除zmq_close()之外,上下文中打开的套接字上的任何进一步操作都将失败,并显示错误代码为ETERM。此函数是可选的,客户端代码仍然需要调用zmq_ctx_term(3)函数来释放由zeromq分配的所有资源。

3.1.4 返回值

  如果成功,zmq_ctx_shutdown()函数将返回零。 否则它将返回-1并将errno设置为下面定义的值之一。

3.1.5 错误

  EFAULT:提供的上下文无效。

3.2 zmq_ctx_term(3)

3.2.1 名称

  zmq_ctx_term - 销毁ZMQ上下文

3.2.2 概要

  int zmq_ctx_term(void * context);

3.2.3 描述

  zmq_ctx_term()函数应该销毁ZMQ上下文。

  上下文终止按以下步骤执行:

  上下文中打开的套接字当前正在进行的任何阻塞操作应立即返回一个错误代码ETERM。除zmq_close()之外,上下文中打开的套接字上的任何进一步操作都将失败,并显示错误代码为ETERM。

  在中断所有阻塞调用之后,zmq_ctx_term()将被阻塞,直到满足以下条件:

    上下文中打开的所有套接字都已使用zmq_close()关闭。

    对于上下文中的每个套接字,应用程序使用zmq_send()发送的所有消息都已被物理地传输到网络对等体,或者使用ZMQ_LINGER套接字选项设置的套接字的逗留期限已过期。

  有关套接字延续行为的更多详细信息,请参阅zmq_setsockopt(3)中的ZMQ_LINGER选项。该函数替换已弃用的函数zmq_term(3)。

3.2.4 警告

  由于ZMQ_LINGER默认为“无限”,因此默认情况下,如果有任何挂起连接或发送,此功能将无限期阻止。我们强烈建议(a)在调用此函数之前,将ZMQ_LINGER设置为在所有套接字上为零,并且(b)关闭所有套接字。

3.2.5 返回值

  如果成功,zmq_ctx_term()函数将返回零。否则它将返回-1并将errno设置为下面定义的值之一。

3.2.6 错误

  EFAULT:提供的上下文无效。
  EINTR:终止被信号中断。如果需要,它可以重新启动。

3.3 zmq_term(废弃)

3.3.1 名称

  zmq_term - 终止ZMQ上下文

3.3.2 概要

  int zmq_term(void * context);

3.3.3 描述

  zmq_term()函数将终止?MQ上下文。

  上下文终止按以下步骤执行:

  上下文中打开的套接字当前正在进行的任何阻塞操作应立即返回一个错误代码ETERM。 除zmq_close()之外,上下文中打开的套接字上的任何进一步操作都将失败,并显示错误代码为ETERM。

  中断所有阻塞调用后,zmq_term()应阻塞,直到满足以下条件:

    上下文中打开的所有套接字都已使用zmq_close()关闭。

    对于上下文中的每个套接字,应用程序使用zmq_send()发送的所有消息都已被物理地传送到网络对等体,或者使用ZMQ_LINGER套接字选项设置的套接字的逗留期限已过期。

  有关套接字延续行为的更多详细信息,请参阅zmq_setsockopt(3)中的ZMQ_LINGER选项。该功能已被zmq_ctx_term(3)弃用。

3.3.4 返回值

  如果成功,zmq_term()函数将返回零。 否则它将返回-1并将errno设置为下面定义的值之一。

3.3.5 错误

  EFAULT:提供的上下文无效。
  EINTR:终止被信号中断。 如果需要,它可以重新启动。

3.4 zmq_ctx_destory(废弃)

3.4.1 名称

  zmq_ctx_destroy - 终止ZMQ上下文

3.4.2 概要

  int zmq_ctx_destroy(void * context);

3.4.3 描述

  zmq_ctx_destroy()函数应该销毁ZMQ上下文上下文。

  上下文终止按以下步骤执行:

  上下文中打开的套接字当前正在进行的任何阻塞操作应立即返回一个错误代码ETERM。 除zmq_close()之外,上下文中打开的套接字上的任何进一步操作都将失败,并显示错误代码为ETERM。

  在中断所有阻塞调用之后,zmq_ctx_destroy()应该阻塞,直到满足以下条件:

    上下文中打开的所有套接字都已使用zmq_close()关闭。

    对于上下文中的每个套接字,应用程序使用zmq_send()发送的所有消息都已被物理地传送到网络对等体,或者使用ZMQ_LINGER套接字选项设置的套接字的逗留期限已过期。

  有关套接字延续行为的更多详细信息,请参阅zmq_setsockopt(3)中的ZMQ_LINGER选项。该功能已被zmq_ctx_term(3)弃用。

3.4.4 返回值

  如果成功,zmq_ctx_destroy()函数将返回零。 否则它将返回-1并将errno设置为下面定义的值之一。

3.4.5 错误

  EFAULT:提供的上下文无效。
  EINTR:终止被信号中断。 如果需要,它可以重新启动。

原文链接: https://www.cnblogs.com/ChinaHook/p/8964459.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    ZeroMQ API(二) 上下文

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/399374

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年4月13日 上午9:21
下一篇 2023年4月13日 上午9:21

相关推荐