zeromq原始碼學習 ctx建立

2021-08-02 14:50:55 字數 1188 閱讀 2092

ctx_t封裝了與zeromq庫相關的全部全域性狀態。當使用zeromq時,需要呼叫zmq_ctx_new函式建立乙個ctx_t物件,並返回該物件,沒有對context物件進行初始化。其中乙個重要的變數starting,它為true時,表示context建立,但是未建立任何乙個socket物件。

當建立地乙個socket時,會先初始化context物件,來準備執行環境。

void *zmq_socket (void *ctx_, int type_)

zmq::ctx_t *ctx = (zmq::ctx_t *)

ctx_;

zmq::socket_base_t *s = ctx->create_socket (type_);

return (void *) s;

}

通過ctx_t中的create_socke函式建立socket:

zmq::socket_base_t *zmq::ctx_t::create_socket (int type_)

//初始化未使用的socket槽索引

for (int32_t i = (int32_t) slot_count - 1;

i >= (int32_t) ios + 2; i--)

}//context已經處於銷毀狀態,則不能建立socket

if (terminating)

//socket已經達到最大數量,不能建立

if (empty_slots.empty ())

//為socket選擇乙個槽索引

uint32_t slot = empty_slots.back ();

empty_slots.pop_back ();

// generate new unique socket id.

int sid = ((int) max_socket_id.add (1)) + 1;

//建立socket,並註冊mailbox

socket_base_t *s = socket_base_t::create (type_, this, slot, sid);

if (!s)

sockets.push_back (s);

slots [slot] = s->get_mailbox ();

return s;

}

PHP的ZMQ擴充套件zeromq原始碼安裝

configure prefix usr locla zmq4.2.1 make make install 參考 php fpm restart 當然這個前提是,你得將php fpm服務註冊到系統中,若沒有註冊,就需要執行php fpm程序乾掉,然後重新啟動。遇到zmq被重複載入,入下圖 可能是在p...

zeromq原始碼分析筆記之架構(1)

zeromq是一種基於訊息佇列的多執行緒網路庫,其對套接字型別 連線處理 幀 甚至路由的底層細節進行抽象,提供跨越多種傳輸協議的套接字。引用雲風的話來說 請求回應模型。由請求端發起請求,並等待回應端回應請求。從請求端來看,一定是一對對收發配對的 反之,在回應端一定是發收對。請求端和回應端都可以是 1...

zeromq原始碼分析筆記之準備(0)

zeromq這個庫主要用於程序通訊,包括本地程序 網路通訊,涉及到一些基礎知識,主要包括管道通訊,socket程式設計的內容,反應器模式 使用io多路復用實現 無鎖佇列這幾塊比較重要的部分,下面的幾個鏈結是這幾塊內容的學習筆記,有了這些知識,能比較好的理解這個開源庫 1 socket原理詳解 2 i...