當前位置:編程學習大全網 - 源碼下載 - socket關於Unix域套接字(Unix Domain Socket)

socket關於Unix域套接字(Unix Domain Socket)

現實世界中兩個人進行信息交流的整個過程被稱作壹次通信(Communication),通信的雙方被稱為端點(Endpoint)。

工具通訊環境的不同,端點之間可以選擇不同的工具進行通信,距離近可以直接對話,距離遠可以選擇打電話、微信聊天。這些工具就被稱為 Socket。

同理,在計算機中也有類似的概念:

在 Unix 中,壹次通信由兩個端點組成,例如 HTTP 服務端和 HTTP 客戶端。

端點之間想要通信,必須借助某些工具,Unix 中端點之間使用 Socket 來進行通信。

Socket 原本是為網絡通信而設計的,但後來在 Socket 的框架上發展出壹種 IPC 機制,就是 UDS。

Unix Domain Socket(UDS,Unix 域套接字),它還有另壹個名字叫 IPC(inter-process communication,進程間通信)。

使用 UDS 的好處顯而易見:不需要經過網絡協議棧,不需要打包拆包、計算校驗和、維護序號和應答等,只是將應用層數據從壹個進程拷貝到另壹個進程。這是因為,IPC 機制本質上是可靠的通訊,而網絡協議是為不可靠的通訊設計的。

UDS 與網絡 Socket 最明顯的區別在於,網絡 Socket 地址是 IP 地址加端口號,而 UDS 的地址是壹個 Socket 類型的文件在文件系統中的路徑,壹般名字以 .sock 結尾。

這個 Socket 文件可以被系統進程引用,兩個進程可以同時打開壹個 UDS 進行通信,而且這種通信方式只會發生在系統內核裏,不會在網絡上進行傳播。

MySQL 在本地可以通過 socket 方式連接。

在本地登錄時,如果 my.cnf 配置文件中的 [client] 部分沒有指定 socket 文件路徑,mysql 默認會去尋找 /tmp/mysql.sock(編譯裝)或 /var/lib/mysql/mysql.sock(rpm安裝),所以如果 mysqld 服務啟動的時候,生成的 socket 文件不是默認路徑的話,登陸可能會報錯(ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock')。

其實 [mysqld] 部分及 [client] 部分都配置具體路徑可避免此問題,也可以在 tmp 路徑下建立軟連接,如:ln -s /pah/to/mysql.sock /tmp/mysql.sock 。

同樣的,socket 文件目錄權限要對 mysql 系統用戶放開。

在docker官方文檔docker-engine中,介紹了三種訪問docker Remote API的方式,分別是unix套接字文件、tcp監聽端口和fd文件描述符。

MySQL中的pid與socket是什麽?

/s/MehZ8GeRD9SBm8PxfGugRw

網絡協議之:socket協議詳解之Unix domain Socket

/17-unix-domain-socket

/s/4RwASqJu3Vc_suslKSbBkw

如何給UNIX域Socket套接字抓包?

/s/SrV9_RouBJtZaUgG4WlamQ

Unix域套接字(Unix Domain Socket)介紹

/s/psmAL216huaqytwrbcoIMw

關於/var/run/docker.sock文件的理解

/developer/article/1454335

Daemon socket option

/engine/reference/commandline/dockerd/#description

使用 Unix Domain Socket 與上遊集群通信

/s/5i_y1O7bSafAW7I51S7N8w

徹底搞懂文件描述符fd

/article/file-fd

  • 上一篇:申請軟件著作權需要哪些材料?
  • 下一篇:西部數碼的成品網站
  • copyright 2024編程學習大全網