ZeroMQ接口函数之 :zmq - 0MQ 轻量级消息传输内核
官方網址: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
?
總結
以上是生活随笔為你收集整理的ZeroMQ接口函数之 :zmq - 0MQ 轻量级消息传输内核的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: windows下flv视频网站进度条随意
- 下一篇: Android开源项目--分类汇总