1. 程式人生 > >高併發伺服器

高併發伺服器

12.7 socket IPC

socket API原本是為網路通訊設計的,但後來在socket的框架上發展出一種IPC機 制,就是UNIX Domain Socket。雖然網路socket也可用於同一臺主機的程序間通訊(通過 loopback地址127.0.0.1),但是UNIX Domain Socket用於IPC更有效率:不需要經過網路協 議棧,不需要打包拆包、計算校驗和、維護序號和應答等,只是將應用層資料從一個程序拷 貝到另一個程序。這是因為,IPC機制本質上是可靠的通訊,而網路協議是為不可靠的通訊 設計的。UNIX Domain Socket也提供面向流和麵向資料包兩種API介面,類似於TCP和UDP, 但是面向訊息的UNIX Domain Socket也是可靠的,訊息既不會丟失也不會順序錯亂。

UNIX Domain Socket是全雙工的,API介面語義豐富,相比其它IPC機制有明顯的優越 性,目前已成為使用最廣泛的IPC機制,比如X Window伺服器和GUI程式之間就是通過UNIX Domain Socket通訊的。

使用UNIX Domain Socket的過程和網路socket十分相似,也要先呼叫socket()創 建 一 個 socket 文 件 描 述 符,address family 指 定 為 AF_UNIX,type 可 以 選 擇 SOCK_DGRAM 或 SOCK_STREAM,protocol引數仍然指定為0即可。

UNIX Domain Socket與網路socket程式設計最明顯的不同在於地址格式不同,用結構體 sockaddr_un表示,網路程式設計的socket地址是IP地址加埠號,而UNIX Domain Socket的地 址是一個socket型別的檔案在檔案系統中的路徑,這個socket檔案由bind()呼叫建立,如果 呼叫bind()時該檔案已存在,則bind()錯誤返回。

以下程式將UNIX Domain socket繫結到一個地址。

12.7.1 server

相關推薦

Netty 100萬級併發伺服器配置

前言 每一種該語言在某些極限情況下的表現一般都不太一樣,那麼我常用的Java語言,在達到100萬個併發連線情況下,會怎麼樣呢,有些好奇,更有些期盼。 這次使用經常使用的順手的netty NIO框架(netty-3.6.5.Final),封裝的很好,介面很全面,就像它現在的域名 netty.io,專注於網路I

用程序池和執行緒池實現併發伺服器

思想:   1.  建立與伺服器相同cpu個數的程序個數來監聽(accept)客戶端響應,並在每個程序中先建立好一個執行緒池   2.  有客戶端訪問時,解除其中一個程序的accpet阻塞,進入到執行緒中來執行接收資料工作( recv() ),用執行緒防止recv阻塞,執行緒呼叫recv方法   3. 

您的快遞(併發伺服器之poll和epoll)請簽收

  前言   之前已經介紹過select函式,請參考這篇部落格:https://www.cnblogs.com/liudw-0215/p/9661583.html,原理都是類似的,有時間先閱讀下那篇部落格,以便於理解這篇部落格。   一、poll函式   1、函式說明   原型:int poll(st

併發伺服器---基礎----IO模式和IO多路複用

轉自:https://www.cnblogs.com/zingp/p/6863170.html   閱讀目錄 1 基礎知識回顧 2 I/O模式 3 事件驅動程式設計模型 4 select/poll/epoll的區別及其Python示例   網路程式設計裡常聽到阻塞IO、

golang-gin-mgo併發伺服器搭建

gin-mgo伺服器搭建 該伺服器實現簡單接收請求並將請求引數封裝儲存在mongodb資料庫中,本文將講述gin-mgo的使用方法。 gin web框架使用介紹 首先獲取gin框架依賴 go get gopkg.in/gin-gonic/g

基於sysctl.conf優化併發伺服器的TCP引數

sysctl.conf工作原理   sysctl命令被用於在核心執行時動態地修改核心的執行引數,可用的核心引數在目錄/proc/sys中。它包含一些TCP/IP堆疊和虛擬記憶體系統的高階選項, 這可以讓有經驗的管理員提高引人注目的系統性能。用sysctl可以讀取設定超過五百個系統變

從0開始,部署.NetCore並構建非阻塞併發伺服器(2)

工具篇看我這篇部落格想搭建伺服器的朋友多半是想在Linux上使用,正所謂工欲善其事必先利其器,一個好用的SSH對我們的工作效率影響也很大,簡單的說下我在Win下常用的SSH軟體和使用教程,老手自動忽略即可推薦工具1--WinSCPWinSCP可以說是我最常用的遠端連線Linu

【Linux】併發伺服器模型(多程序模型和多執行緒模型)

多程序併發伺服器 使用多程序併發伺服器時要考慮以下幾點:             1.      父程序最大檔案描述個數(父程序中需要close關閉accept返回的新檔案描述符)             2.      系統內建立程序個數(與記憶體大小相關)      

epoll程式設計,如何實現併發伺服器開發?

閒答。 按重要性和基礎程度,打亂下順序吧~~ 先回問題,然後說怎麼實現。 注:以下資料,均基於亞馬遜AWS c3.xlarge 機型。 虛擬CPU:4 記憶體:7.5 GB c3.xlarge 配置和價格: AWS | Amazon EC2 ~~~~~~~~~~ 分割線 ~~~~~~~~~~ 2、查了很多資料

Linux併發伺服器解決方案

Linux高併發伺服器案例演示 在網路通訊中,我們常常的伺服器經常會受到成千上萬的請求提示,而電腦會根據請求建立相對應的socket連結,但是接觸過Linux網路程式設計的人都知道,Linux連結和客戶端建立連線,會經過四步(這裡以TCP說明) 第一步,建立socket

併發伺服器開發--網路模型

1 I/O型別 Read分為兩步: a.Waiting for thedata to be ready(等待資料準備)。 b.Copying thedata from the kernel to the process(將資料從核心拷貝到程序中) Blocking I/O

併發伺服器

12.7 socket IPCsocket API原本是為網路通訊設計的,但後來在socket的框架上發展出一種IPC機 制,就是UNIX Domain Socket。雖然網路socket也可用於同一臺主機的程序間通訊(通過 loopback地址127.0.0.1),但是UNIX Domain Socket用

負載併發伺服器開發參考

1、軟體框架 高效能的軟體框架,一般都基於event-driven、非同步模式,同時提供諸如執行緒池、epoll(*unx)IOCP(I/O Completion Port,windows)等技術來提高併發處理效能,python、C++、Java中有一個典型的框架性專案提供了對高效能網路通訊框架的支援,常用

IOCP 實現一個簡單併發伺服器程式

 前言:原始碼使用比較高階的IOCP技術,它能夠有效的為多個客戶端服務,利用IOCP程式設計API,它也提供了一些實際問題的解決辦法,並且提供了一個簡單的帶回復的檔案傳輸的客戶端/伺服器。 1.1 要求: l 文章要求讀者熟悉C++, TCP/IP, 套接字(sock

高效能併發伺服器架構淺析--多執行緒模式

談到高效能高併發伺服器的設計與開發,很關鍵的一模組就是高效的I/O處理了。 那麼如何高效的處理I/O呢?當然是首推epoll來實現I/O複用了! 首先我們來簡單的瞭解下epoll,有經驗的工程師都知道的。epoll是目前linux作業系統上最強大的事件管理機制,也是linu

Linux + C + Epoll實現併發伺服器(執行緒池 + 資料庫連線池)

一, 背景        先說下我要實現的功能,server端一直在linux平臺下面跑,當客戶端有請求過來的時候server端接受到請求,拿到客戶端的資料,根據拿到的資料做出相應的處理,得到處理的結果直接把結果資料傳送給客戶端。這樣一個連線的請求結束,我的不

分散式併發伺服器做請求分發,session共享(nginx+tomcat+redis)

我這裡列舉一個可行方案(nginx+tomcat+redis) 首先 nginx,它幫助實現了分散式 Nginx是一款輕量級的Web 伺服器/反向代理伺服器及電子郵件(IMAP/POP3)代理伺服器

實現併發伺服器三種簡化模型 執行緒 程序 IO複用

知識點:UNIX網路程式設計第四章, 第五章,第六章 多程序模型: #include<stdio.h> #include<stdlib.h> #include<unistd.h> #include<arpa/inet.h>

1併發伺服器:多路IO之select

 1 select A:select能監聽的檔案描述符個數受限於FD_SETSIZE,一般為1024,單純改變程序開啟 的檔案描述符個數並不能改變select監聽檔案個數 B:解決1024

利用libevent 和執行緒池實現併發伺服器的設計

主程序新增監聽套接字的事件並進行事件迴圈,將連線描述符放入定義的資料結構中,並在主程序中進行寫管道,觸發子執行緒的讀管道事件,然後從連線結構中獲取連線描述符進行和客戶端進行通訊。其中主程序和子執行緒都有不同的基事件base. #include <stdi