zmq 中的
cs 模式
zmq 中 的 網路程式設計
,
server:
zmq_ctx_new 建立環境
,即啟動執行緒池
,初始化一些結構體等等一些預備操作
,,, zmq_socket
建立套接字,就是
linux c
中 的socket, zmq_bind
繫結位址並對進行監聽
(linux c
中是 bind listen),
然後 我們就可以
send ,
和 recv ,
在zmq
中是zmq_send, zmq_recv
或者 zmq_msg_send, zmq_msg_recv
其實現是使用的是epoll 模式, 對
epoll
的事件例如
epollin , epollout, epollhup
等等的一些事件進行監聽
client:
zmq_ctx_new 建立環境
, zmq_socket
建立套接字
, zmq_connect
發起連線
, 如果我們需要對
zmq中的一些事件進行監聽
, 則需要要
zmq_socket_monitor
建立乙個雙向管道, 在
linux c
中的就是
socketpair()
進行建立
, 我們可以在這個管道中
recv, send ,
然後會根據讀取到的事件
(該事件在最後
),然後看看在套接字組上
,發生了什麼事情
, 如果不需要
,我們就可以對其進行接受
,和傳送了
但是, 在
zmq 中,
套接字的型別
, 不止是
sock_stream ,
和sock_dgara,
兩種, zmq
中的套接字
, 把這些細分了很多
, 不同的模型中對
send
和 recv
加了限制
, 如果不按照其模式的要求來
, 接受和傳送訊息會沒有效果 .
請求-應答模型
:(zmq_req)
該模型是被用作
從乙個客戶端傳送請求到乙個或者是多個伺服器,然後伺服器對每個請求做出請求.
如果沒有伺服器存在,客戶端會阻塞
, 直到有乙個伺服器變成可用狀態為止
,其伺服器操作是
zmq_recv, zmq_send.
即交替使用
對於客戶端來說,需要先
send,
再 recv
zmq_rep 模式
該模式是客戶端傳送請求,到伺服器
, 伺服器接受
,並對其做出相應的處理
其使用時
先zmq_recv, 再
zmq_send.
該模式,一般用於伺服器
zmq_dealer 模型
該模型是對請求響應套接字的擴充套件, 每個訊息的傳送是通過輪詢排程演算法去實現. 其 send和 recv 是不受限制 的
zmq_stream 模型
該模式對send, recv 不限制,.
zmq__pub 模型
就是傳送方, 該型別的套接字不能接受訊息, 只能傳送訊息, 在zmq中沒有實現該模式
的接收操作, zmq_recv不起作用,zmq_send 是起作用的.
zmq_sub 模型
接受方, 與zmq_pub連用, 不能傳送訊息, 只能接受訊息,在zmq中沒有實現該模式的
傳送操作, 也就是zmq_send 是不起作用的.zmq_recv 是起作用的.
zmq_pair: 該套接字模型 , 類似於雙向管道, 也就是linux c 中的socketpair(), 主要是用於程序間通訊, 可以通過它來檢測 zmq中的連線, 接受, 重連, 崩潰等等的一些事件.
以下是 zmq_event_t 的事件型別.
zmq_event_connected
zmq_event_connect_delayed
zmq_event_connect_retried
zmq_event_listening
zmq_event_bind_failed
zmq_event_accepted
zmq_event_accept_failed:zmq_event_closed
zmq_event_close_failed
zmq_event_disconnected:
zmq 中的事件型別
zmq event connected 鏈結已建立 當和遠端的另一端的連線建立好的時候,zmq event connected事件會被觸發。同步和非同步事件都會發生觸發此事件。事件值是新連線的socket的fd。zmq event connect delayed 同步連線失敗,仍在進行重試 當乙個請...
C S的學習總結
很不容易地將機房收費系統個人版結束了 這就像是到了長長的旅程中的乙個加油站 不僅需要維護修理 也需要加油充氣 以便更好地向下乙個目的地進發 我不能稀里糊塗地 延續疲憊的狀態繼續前進 就像公尺老師說得 汽車理論 我需要將這一路來的經驗教訓轉化為汽油 而不是重負.回顧這將近一年來的 c s歷程。軟體工程...
Zmq中pub和sub的用法
pub 示例 int main int,char zmq context t context 1 若在類中進行封裝時,應與socket t的生命週期一致。zmq socket t pubsocket context,zmq pub pubsocket.bind tcp 5555 while true...