nanomsg框架簡介

2021-08-11 12:14:12 字數 2879 閱讀 1709

1、nanomsg概述

ø  nanomsg是乙個socket library,它提供了幾種常見的通訊模式,為了能使網路層快速、可擴充套件並且能易於使用。用c實現,且適用於廣泛的作業系統,幾乎不需要依賴。這裡的通訊模式(也稱為「可擴充套件性協議」)是構建分布式系統的基本框架。通過組合它們,可以建立廣泛的分布式應用程式。

ø  目前可用的可擴充套件性協議有:

pair - 簡單的一對一溝通

bus - 簡單的多對多通訊

reqrep - 允許構建無狀態服務集群來處理使用者請求

pubsub - 將訊息分發給訂閱訊息的使用者

pipeline - 彙總來自多個**的訊息,並在許多目的點之間進行負載平衡

survey - 允許一次查詢多個應用程式的狀態

ø  可擴充套件性協議分層在傳輸層之上的網路堆疊中,目前nanomsg library支援以下傳輸機制:

inproc - 程序內的傳輸(執行緒,模組等之間)

ipc - 在單個機器上的程序間傳輸

tcp - 通過tcp的網路傳輸

該庫向應用程式公開了乙個類似bsd的套接字c api。

2、nanomsg原始碼

ø  nanomsg/src/

nn.h:nanomsg對外暴露的api介面

transport.h:通訊層定義,主要是為了暴露給使用者以實現擴充套件,但目前包含了utils下的相關標頭檔案,其中inproc.h/ipc.h/tcp.h是對應的transport

protocol.h:協議層定義,也是為了暴露給使用者以實現擴充套件,其中reqrep.h/pubsub.h/bus.h/pair.h/pipeline.h/survey.h是對應的protocol

utils/:實用工具包,包含基本資料結構(list/queue/hash)、互斥及原子操作(mutex/atomic)等

transports/:通訊層實現,包括(inproc:程序內通訊;ipc:程序間通訊;tcp:tcp通訊)

protocols/:協議層實現,包括(reqrep:請求響應;pubsub:訂閱發布等)

core/:通用**

aio/:執行緒池模擬的非同步操作,帶狀態機的事件驅動等

cmakelists.txt:cmake編譯檔案

pkgconfig.in:pkgconfig工具配置檔案

ø  nanomsg/src/nn.h

nn_export int nn_socket (int domain, intprotocol);

ü  domain:af_sp(標準穩定的sp socket);af_sp_raw(原始套接字省略了af_sp套接字中的端到端功能,因此可用於在sp拓撲結構中實現中間裝置)

ü  protocol:相應的6種可擴充套件性協議對應的socket types

:1)所有sp sockets是基於訊息的,所以其忽略了型別定義,這裡都是sock_seqpacke(有序分組套接字)型別的;

2)nn_socket函式返回的檔案描述符不是標準描述符,如果與系統函式一起使用時將呈現為無法定義的行為,可能會發生衝突。

ü  errors:

1)eafnosupport:指定address family不支援;

2)einval:未知的protocol;

3)emfile:達到開啟的sp socket或os限制的最大的檔案描述符;

4)eterm:library終止。

nn_export int nn_close (int s);

ü  errors:

1)     ebadf:提供的socket是無效的

2)     eintr:操作被某個訊號打斷,socket不能完全關閉,呼叫nn_close()函式能重新啟動操作

注:關閉socket,任何未被應用程式接收的入站緩衝的訊息將被丟棄,同時該庫將傳輸出站訊息並指定nn_linger socket選項。

nn_export int nn_setsockopt (int s, intlevel, int option,                             const void *optval, size_t optvallen);

nn_export int nn_getsockopt (int s, intlevel, int option,                            void *optval, size_t *optvallen);

nn_export int nn_bind (int s, const char*addr);

nn_export int nn_connect (int s, const char*addr);

nn_export int nn_shutdown (int s, int how);

nn_export int nn_send (int s, const void*buf, size_t len, int flags);

nn_export int nn_recv (int s, void *buf,size_t len, int flags);

nn_export int nn_sendmsg (int s, conststruct nn_msghdr *msghdr, int flags);

nn_export int nn_recvmsg (int s, struct nn_msghdr*msghdr, int flags);

nn_export int nn_device (int s1, int s2);

ø   

3、pubsub模式

demo

4、reqrep模式

demo

5、參考鏈結

nanomsg

源**nanomsg

使用者手冊

nanomsg

社群

nanomsg使用筆記 1

目前大致的使用情況是使用pollfd,begin nn rep no nn push no nn pub can out nn req can out nn survey can in can out 但是如果沒有survey就去recv,會報錯efsm.使用nn errno和nn strerror...

web框架簡介,django簡介

目錄django簡介 建立django專案的方式 django各個檔案的作用 django小白必會三板斧 c s架構 客戶端服務端 b s架構 瀏覽器伺服器 本質 b s架構其實也是c s架構 超文字傳輸協議 規定了客戶端和服務端訊息傳輸的格式 四大特性 1 基於tcp ip協議作用於應用層的協議 ...

JAVA SSH 框架簡介

在struts spring hibernate的組合框架模式中,三者各自的特點都是什麼?struts 的mvc設計模式可以使我們的邏輯變得很清晰。spring 的ioc和aop可以使我們的產品在最大限度上解藕。hibernate的當然就是實體物件的持久化了 典型的j2ee三層結構,分為表現層 中間...