官方網址:http://api.zeromq.org/4-0:zmq
zmq(7) 0MQ Manual - 0MQ/3.2.5
Name
zmq – ØMQ 輕量級消息傳輸內核
Synopsis
#include <znq.h> cc [flags] files –lzmq [libraries]
Description
ØMQ輕量級消息傳輸內核是一個從標准socket接口的擴展而來的鏈接庫,這些接口通常是由一些專門的傳送中間設備來提供。ØMQ提供了一個步消息傳送、多模式消息傳送、消息過濾(訂閱)、對多種傳輸協議無縫接入的集合。
本文檔呈現了ØMQ的概念,描述了ØMQ是怎樣對標准socket進行抽象並為ØMQ庫提供的函數提供了一個參考手冊。
Context
在使用任何ØMQ庫函數之前,必須創建一個ØMQ context。在結束應用程序時,必須銷毀(刪除)這個context。一下函數是用來對context進行操作的。
● 創建一個新的context
zmq_ctx_new(3)
● 操作context的屬性
zmq_ctx_set(3) zmq_ctx_get(3)
● 刪除一個context
zmq_ctx_destroy(3)
● 監視一個context
zmq_ctx_set_monitor(3)
以下被棄用的函數也可以用來創建和刪除context
● 初始化一個context
zmq_init(3)
● 終結一個context
zmq_term(3)
Thread safety(線程安全)
ØMQ context 是線程安全的,可以根據需要盡可能任意的被多個線程共享,而不需要在調用端添加請求鎖。
除非把一個socket的內存整體的從過一個線程移動到一個線程中,否則單個的socket不是線程安全的。事實上,這就意味着,應用程序可以在一個線程中用函數zmq_soc ket ()創建一個socket,然后把它傳遞給一個新創建線程,作為這個線程初始化時的一部分。比如,你可以把一個結構體作為一個參數傳遞給函數pthread_create() 。
Multiple contexts
在一個應用程序中可以有多個context共存。這樣應用程序在對context直接進行操作的同時,還可以使用任意多其它庫或者模塊,這些模塊本身也在像上文中提到的那樣線程安全的使用ØMQ。
Messages
一個ØMQ的消息在應用程序之間或者在同一個程序的不同模塊之間傳輸的是一個離散的消息單元。ØMQ消息沒有內部的結構,並且從ØMQ自身的角度來看,消息被看作是不透明的二進制數據。
下面的函數用來對消息進行操作:
● 初始化一個消息
zmq_msg_init(3) zmq_msg_init_size(3) zmq_msg_init _data(3)
● 發送和接收消息
zmq_msg_send(3) zmq_msg_recv(3)
● 釋放消息
zmq_msg_close(3)
● 獲取消息
zmq_msg_data(3) zmq_msg_size(3) zmq_msg_mor e(3)
● 設置消息屬性
zmq_msg_get (3) zmq_msg_set (3)
● 消息處理
zmq_msg_copy(3) zmq_msg_move(3)
Sockets
ØMQ sockets 使用一種抽象的異步消息隊列,這通過准確的基於socket類型語義方式實現。查詢zmq_socket (3)函數可以看到都提供了哪些socket類型可使用。
以下提供的函數用來對socket進行操作:
● 創建一個socket
zmq_socket (3)
● 關閉一個socket
zmq_close(3)
● 操作socket屬性
zmq_getsockopt (3) zmq_setsockopt (3)
● 指定socket 消息流
zmq_bind(3) zmq_connect (3)
● 發送與接收消息
zmq_msg_send(3) zmq_msg_recv(3) zmq_send(3) zmq_recv(3)
Input/output multiplexing (多路輸入/輸出)
ØMQ為ØMQ socktes和標准socktes均提供了一種使應用程序進行多路輸入/輸出的機制。這種機制映射而來標准的poll()系統調用,在zmq_poll(3)中有更詳細的描述。
Transports
一個ØMQ socket 可以使用多種不同的基礎傳輸機制。每種傳輸機制適合於具體的使用目的,並且每種方式都有它自己的優點和缺點。
● 單一傳輸使用TCP
zmq_tcp(7)
● 可靠的多路廣播傳輸使用 PGM
zmq_pgm(7)
● 進程內部的本地傳輸
zmq_ipc(7)
● 進程內部(線程內部)的本地傳輸
zmq_inproc(7)
Proxies
ØMQ提供了代理來創建扇入和扇出的拓撲方式。一個代理把frontend socket鏈接到backend socket,並且不透明的在兩個sockte之間傳輸所有的消息。代理可以不透明的獲取第三方的所有傳輸數據。你可以使用zmq_proxy(3) 在應用程序中使用代理。
Error handling
ØMQ庫函數使用POSIX系統中的標准規定來獲取錯誤信息。通常來說,這就意味着ØMQ庫函數會返回NULL(如果是返回指針類型)或者返回一個負值(如果是返回int類型),而真正的錯誤值會存儲在errno變量中。
在非POSIX系統中,開發者們可能會經歷errno變量當前值的情況。zmq_errno()函數就是用來解決這樣的問題的。更多的細節請查看zmq_errno(3)函數。
zmq_strerror()函數用來將ØMQ指定的錯誤值轉換為字符串類型的信息,更多的細節請查看函數zmq_strerror(3)。
Miscellaneous
下面是一些其余的函數:
● 返回ØMQ 庫的版本號
zmq_version(3)
Language bindings
ØMQ庫提為各種語言提供了可供調用的接口。本文檔描寫的借口可以用來給C程序猿使用。本文的意圖旨在,使用其它語言的ØMQ使用者們應該能夠通過本文聯系到他們自己的語言版本。
語言版本(C++、Python、PHP、Ruby、Java等等)被ØMQ社團的其它成員提供,你可以在ØMQ網站上找到他們。
Authors
This ØMQ manual page was written by Martin Sustrik < sustrik@250bpm.com > , MartinLucina < martin@lucina.net > , and Pieter Hintjens < ph@imatix.com > .
Resources
Main website:http://www.zeromq.org/
Report bugs to the ØMQ development mailing list:< zeromq-dev@lists.zeromq.org>
Copying
Free use of this software isgranted under the terms of the GNU Lesser General Public License
(LGPL). For details see the files COPYING and COPYING. LESSER included with the ØMQ distribution.
Website design and content is copyright (c) 2007-2012 iMatix Corporation. Contactus for professional support. Site content licensed under the Creative Commons Attribution-Share Alike 3.0 License . ØMQ is copyright (c) Copyright (c) 2007-2012 iMatix Corporation and Contributors . ØMQ is free software licensed under the LGPL. ØMQ, ZeroMQ, and 0MQ are trade marks of iMatix Corporation. Terms of Use — Privacy Policy
更多 ZeroMQ API :http://www.cnblogs.com/fengbohello/p/4230135.html
譯者:風波
mail : fengbohello@qq.com