1. 程式人生 > >ZeroMQ介面函式之 :zmq

ZeroMQ介面函式之 :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 < [email protected] > , MartinLucina < [email protected] > , and Pieter  Hintjens < [email protected] > .

Resources

Main website:http://www.zeromq.org/

Report  bugs  to  the ØMQ development  mailing  list:< [email protected]>

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

譯者:風波

mail : [email protected]