網路程式設計學習

2021-06-03 10:05:25 字數 814 閱讀 2244

1) 64-bit系統的位址空間足夠大,不會出現沒有足夠的連續空間這種情況,不用擔心記憶體碎片問題,再說伺服器不是7*24執行的。linux kernel也大量用到了動態記憶體分配。既然作業系統核心都不怕動態分配記憶體造成碎片,應用程式為什麼要害怕?

2)現在的記憶體分配器(malloc及其第三方實現)今非昔比,除了memcached這種純以記憶體為賣點的程式需要自己設計分配器之外,其他網路程式大可使用系統自帶的malloc或者某個第三方實現。 之前說的使用記憶體池主要有幾個考慮,那麼現在的記憶體碎片和效率問題就不再是問題,也就是剩下了乙個唯一的好處,避免malloc遍布整個專案,從而導致的記憶體洩露等問題。

3)連線的關閉:服務端主動關閉連線的缺點之一是會多占用伺服器資源。服務端主動關閉連線之後會進入time_wait狀態,在一段時間之內hold住一些核心資源。如果併發訪問量很高,這會影響服務端的處理能力。這似乎暗示我們應該把協議設計為客戶端主動關閉,讓time_wait狀態分散到多台客戶機器上,化整為零。 這又有另外的問題:客戶端賴著不走怎麼辦?會不會造成拒絕服務攻擊?或許有乙個二者結合的方案:客戶端在收到響應之後就應該主動關閉,這樣把 time_wait 留在客戶端。服務端有乙個定時器,如果客戶端若干秒鐘之內沒有主動斷開,就踢掉它。這樣善意的客戶端會把time_wait留給自己,buggy的客戶端會把 time_wait留給服務端。或者乾脆使用長連線協議,這樣避免頻繁建立銷毀連線。 

4)tcp網路程式設計有三個例子最值得學習研究,分別是echo、chat、proxy,都是長連線協議。 

5)tcp傳輸也會出錯,這裡說的「出錯」指的是收到的資料與傳送的資料不一致,而不是資料不可達。在應用層協議最好加上自己的checksum。

參考:

網路程式設計學習

在了解網路程式設計前,我們需要了解一下套接字 socket 套接字是通訊的基石,是支援tcp ip協議的路通訊的基本操作單元。可以將套接字看作不同主機間的程序進行雙間通訊的端點,它構成了單個主機內及整個網路間的程式設計介面。socket 套接字 可以看成是兩個網路應用程式進行通訊時,各自通訊連線中的...

網路程式設計學習 tcp ip程式設計

tcp 不記錄訊息邊界 udp 記錄訊息邊界 用到的結構體 struct sockaddr un 例子 struct sockaddr un serveraddr serveraddr.sun family af unix server socket strcpy serveraddr.sun pa...

MFC網路程式設計學習

網路程式設計人員可以呼叫windows作業系統套接字訪問通訊協議,套接字存在與通訊區域中,windows套接字只支援乙個通訊區域即網際域 af inet 套接字的型別有三類 流式套接字 sock stream 和資料報式套接字 sock dgram 和原始套接字 流式套接字基於tcp協議,資料報式套...