android socket 長連接_TCP/IP,http,socket,長連接,短連接

點擊上方藍色字體,選擇“標星公眾號”

優質文章,第一時間送達

上一篇:這300G的Java資料是我師傅當年給我的,免費分享給大家

下一篇:這200G的Java實戰資料是我師傅當年教我的第二招

作者 | ksfzhaohui

來源 |?my.oschina.net/OutOfMemory/blog/95803

TCP/IP
TCP/IP是個協議組,可分為三個層次:網絡層、傳輸層和應用層。
在網絡層有IP協議、ICMP協議、ARP協議、RARP協議和BOOTP協議。
在傳輸層中有TCP協議與UDP協議。
在應用層有:TCP包括FTP、HTTP、TELNET、SMTP等協議
? ? ? ? ? ? ? ? ?UDP包括DNS、TFTP等協議短連接
連接->傳輸數據->關閉連接
HTTP是無狀態的,瀏覽器和服務器每進行一次HTTP操作,就建立一次連接,但任務結束就中斷連接。
也可以這樣說:短連接是指SOCKET連接后發送后接收完數據后馬上斷開連接。長連接
連接->傳輸數據->保持連接 -> 傳輸數據-> 。。。->關閉連接。
長連接指建立SOCKET連接后不管是否使用都保持連接,但安全性較差。http的長連接
HTTP也可以建立長連接的,使用Connection:keep-alive,HTTP 1.1默認進行持久連接。HTTP1.1和HTTP1.0相比較而言,最大的區別就是增加了持久連接支持(貌似最新的 http1.0 可以顯示的指定 keep-alive),但還是無狀態的,或者說是不可以信任的。什么時候用長連接,短連接?
?長連接多用于操作頻繁,點對點的通訊,而且連接數不能太多情況,。每個TCP連接都需要三步握手,這需要時間,如果每個操作都是先連接,再操作的話那么處理速度會降低很多,所以每個操作完后都不斷開,次處理時直接發送數據包就OK了,不用建立TCP連接。例如:數據庫的連接用長連接, 如果用短連接頻繁的通信會造成socket錯誤,而且頻繁的socket 創建也是對資源的浪費。
而像WEB網站的http服務一般都用短鏈接,因為長連接對于服務端來說會耗費一定的資源,而像WEB網站這么頻繁的成千上萬甚至上億客戶端的連接用短連接會更省一些資源,如果用長連接,而且同時有成千上萬的用戶,如果每個用戶都占用一個連接的話,那可想而知吧。所以并發量大,但每個用戶無需頻繁操作情況下需用短連好。
總之,長連接和短連接的選擇要視情況而定。發送接收方式1、異步
報文發送和接收是分開的,相互獨立的,互不影響。這種方式又分兩種情況:
(1)異步雙工:接收和發送在同一個程序中,由兩個不同的子進程分別負責發送和接收
(2)異步單工:接收和發送是用兩個不同的程序來完成。2、同步
報文發送和接收是同步進行,既報文發送后等待接收返回報文。同步方式一般需要考慮超時問題,即報文發出去后不能無限等待,需要設定超時時間,超過該時間發送方不再等待讀返回報文,直接通知超時返回。
在長連接中一般是沒有條件能夠判斷讀寫什么時候結束,所以必須要加長度報文頭。讀函數先是讀取報文頭的長度,再根據這個長度去讀相應長度的報文。Socket是什么

Socket是應用層與TCP/IP協議族通信的中間軟件抽象層,它是一組接口。在設計模式中,Socket其實就是一個門面模式,它把復雜的TCP/IP協議族隱藏在Socket接口后面,對用戶來說,一組簡單的接口就是全部,讓Socket去組織數據,以符合指定的協議。

c8246d2400be89b747a5e6b6775b81b7.png

Socket 通信示例

6a6a987594a3b050429d5b11338a97f4.png

主機 A 的應用程序要能和主機 B 的應用程序通信,必須通過 Socket 建立連接,而建立 Socket 連接必須需要底層 TCP/IP 協議來建立 TCP 連接。建立 TCP 連接需要底層 IP 協議來尋址網絡中的主機。我們知道網絡層使用的 IP 協議可以幫助我們根據 IP 地址來找到目標主機,但是一臺主機上可能運行著多個應用程序,如何才能與指定的應用程序通信就要通過 TCP 或 UPD 的地址也就是端口號來指定。這樣就可以通過一個 Socket 實例唯一代表一個主機上的一個應用程序的通信鏈路了。

建立通信鏈路
當客戶端要與服務端通信,客戶端首先要創建一個 Socket 實例,操作系統將為這個 Socket 實例分配一個沒有被使用的本地端口號,并創建一個包含本地和遠程地址和端口號的套接字數據結構,這個數據結構將一直保存在系統中直到這個連接關閉。在創建 Socket 實例的構造函數正確返回之前,將要進行 TCP 的三次握手協議,TCP 握手協議完成后,Socket 實例對象將創建完成,否則將拋出 IOException 錯誤。
與之對應的服務端將創建一個 ServerSocket 實例,ServerSocket 創建比較簡單只要指定的端口號沒有被占用,一般實例創建都會成功,同時操作系統也會為 ServerSocket 實例創建一個底層數據結構,這個數據結構中包含指定監聽的端口號和包含監聽地址的通配符,通常情況下都是“*”即監聽所有地址。之后當調用 accept() 方法時,將進入阻塞狀態,等待客戶端的請求。當一個新的請求到來時,將為這個連接創建一個新的套接字數據結構,該套接字數據的信息包含的地址和端口信息正是請求源地址和端口。這個新創建的數據結構將會關聯到 ServerSocket 實例的一個未完成的連接數據結構列表中,注意這時服務端與之對應的 Socket 實例并沒有完成創建,而要等到與客戶端的三次握手完成后,這個服務端的 Socket 實例才會返回,并將這個 Socket 實例對應的數據結構從未完成列表中移到已完成列表中。所以 ServerSocket 所關聯的列表中每個數據結構,都代表與一個客戶端的建立的 TCP 連接。備注:
Windows 下單機最大TCP連接數
調整系統參數來調整單機的最大TCP連接數,Windows 下單機的TCP連接數有多個參數共同決定:
以下都是通過修改注冊表[HKEY_LOCAL_MACHINE \System \CurrentControlSet \Services \Tcpip \Parameters]1.最大TCP連接數?? ? ?TcpNumConnections2.TCP關閉延遲時間?? ?TCPTimedWaitDelay ? ?(30-240)s3.最大動態端口數?? MaxUserPort ?(Default = 5000, Max = 65534) TCP客戶端和服務器連接時,客戶端必須分配一個動態端口,默認情況下這個動態端口的分配范圍為 1024-5000 ,也就是說默認情況下,客戶端最多可以同時發起3977 Socket 連接4.最大TCB 數量?? MaxFreeTcbs
系統為每個TCP 連接分配一個TCP 控制塊(TCP control block or TCB),這個控制塊用于緩存TCP連接的一些參數,每個TCB需要分配 0.5 KB的pagepool 和 0.5KB 的Non-pagepool,也就說,每個TCP連接會占用 1KB 的系統內存。
非Server版本,MaxFreeTcbs 的默認值為1000 (64M 以上物理內存)Server 版本,這個的默認值為 2000。也就是說,默認情況下,Server 版本最多同時可以建立并保持2000個TCP 連接。5. 最大TCB Hash table 數量?? MaxHashTableSize TCB 是通過Hash table 來管理的。
這個值指明分配 pagepool 內存的數量,也就是說,如果MaxFreeTcbs = 1000 , 則 pagepool 的內存數量為 500KB那么 MaxHashTableSize 應大于 500 才行。這個數量越大,則Hash table 的冗余度就越高,每次分配和查找 TCP ?連接用時就越少。這個值必須是2的冪,且最大為65536.
IBM WebSphere Voice Server 在windows server 2003 下的典型配置
MaxUserPort = 65534 (Decimal)
MaxHashTableSize = 65536 (Decimal)
MaxFreeTcbs = 16000 (Decimal)
這里我們可以看到 MaxHashTableSize 被配置為比MaxFreeTcbs 大4倍,這樣可以大大增加TCP建立的速度。

說句題外話,springboot技術交流群可以加老趙以微信,但是坑位有限哦

4969d09517ce2862bcea4f97e9e3d398.png

猜你喜歡

1、經驗:那些年,我在大學接過的外包項目

2、終于見識到12306 的架構到底有多“牛逼”?

3、帶你漲姿勢的認識一下 Kafka

4、2019年10月全國程序員工資統計,一半以上的職位5個月沒招到人。

5、周末手殘寫了RPC一個框架【附源碼】

6、Spring 體系常用項目一覽

7、史上最全的Nginx配置參數中文說明

8、快速搭建ELK日志分析系統

強烈推薦一位大佬的公眾號

2b1ce4026b1a2482f1d2cdee4cd8b6b3.png

好文章,我在看??

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/396992.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/396992.shtml
英文地址,請注明出處:http://en.pswp.cn/news/396992.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

二、Python安裝擴展庫

第一步:推薦easy_install工具 下載地址:https://pypi.python.org/pypi/setuptools 下載"ez_setup.py"文件; 通過運行cmd命令找到ez_setup.py文件所在目錄,通過命令[python ez_setup.py]執行安裝easy_install 安裝成功截圖 第二步:安裝擴展酷 例如安裝"suds"…

ORACLE 10.2.01升級10.2.05 for windows 詳細文檔

最近要做一個數據庫的升級工作,提前在自己的PC機上練習了一下,這種文檔在網上很多,但是大多都是使用命令編輯腳本,其實數據庫還有一個DBUA的升級工具可以使用,使升級工作方便了很多。 OS環境:windows XP 32…

php 導出mysql 結構_導出結構和數據(如phpmyadmin)

在這里,您可以找到一個全面的解決方案來轉儲MySQL結構和數據,比如在PMA中(不使用exec、passthru等):它是Dszymczuk項目的一個分支,有我的增強功能。用法很簡單//MySQL connection parameters$dbhost localhost;$dbuser dbuser;$dbpsw pass;$dbname dbname;//Connects to my…

tableViewCell的操作

在iOS的開發過程中,tableView的使用永遠都是最常用的控件。今天學習了一下tableViewCell的操作。代碼并不是很復雜,如果有OC開發經驗的人,應該很容易看懂的。 class ViewController: UIViewController ,UITableViewDelegate, UITableViewData…

stm32正交編碼器 原理圖_惡劣環境下應用的電感式增量編碼器和絕對編碼器

編碼器可分為兩種基本類型 - 增量編碼器和絕對編碼器。增量編碼器的顯著特征是它報告角度的變化。換句話說,當增量編碼器通電時,它不會報告其角位置,直到它具有測量的參考點。絕對編碼器明確地在比例或范圍內報告其位置。換句話說&#xff0c…

【SqlServer】Sqlserver中的DOS命令操作

輸入osql ?查看是否支持當前版本,如果是SQL Server 2005以上用Sqlcmd , 以下用Osql連接數據庫(a)Osql -S localhost -U username -P password(SQL Server身份驗證,需要用戶民和密碼)(b)Osql -S localhos…

微信小程序內訓筆記

2016年9月22日凌晨微信官方正式宣布“小程序”開始內測,有“微信之父”之稱、騰訊集團高級執行副總裁張小龍在2016年末對外宣布“小程序“應用將于2017年1月9日正式推出 這一次微信還是按照慣例,通過機器跑出的數據,首先將“小程序”開放給了…

python基礎代碼的含義_Python基礎學習篇

原標題:Python基礎學習篇 1、編碼 默認情況下,Python 3 源碼文件以 UTF-8 編碼,所有字符串都是unicode 字符串。 當然你也可以為源碼文件指定不同的編碼:# -*- coding: cp-1252 -*- 2、標識符 第一個字符必須是字母表中字母或下劃…

java面向對象super_【JavaSE】面向對象之super、final

一、super關鍵字它是一個指代變量,用于在子類中指代父類對象。1.作用指代父類對象區分子父類同名的成員變量,區分父類中成員變量和子類中同名的局部變量2.使用與this相同,調用父類成員變量和成員方法:super.xx super.xxx()調用父類…

Week_1_Physical Electronics and Semiconductors

Semiconductors Fundamentals Type of solids 轉載于:https://www.cnblogs.com/ronnielee/p/9579783.html

【Linux高頻命令專題(23)】tar

概述 通過SSH訪問服務器,難免會要用到壓縮,解壓縮,打包,解包等,這時候tar命令就是是必不可少的一個功能強大的工具。linux中最流行的tar是麻雀雖小,五臟俱全,功能強大。 tar命令可以為linux的文…

2. Add Two Numbers

直接用一個carry記錄進位就可以 1 //NEW2 class Solution {3 public ListNode addTwoNumbers(ListNode l1, ListNode l2) {4 ListNode root new ListNode(0);5 return addTwoNumbers(l1, l2, root);6 }7 public ListNode addTwoNumbers(ListNode …

安裝Windows更新程序遇到錯誤:0x80070422

看看服務那里 windows update服務是不是被禁用了? 還有一個問題可能是由于Windows Modules Installer被禁用了。

談談對python的理解_淺談對python pandas中 inplace 參數的理解

這篇文章主要介紹了對python pandas中 inplace 參數的理解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧 pandas 中 inplace 參數在很多函數中都會有,它的作用是:是否在原對象基礎上進行修改 inplace True&am…

java中 hashset_Java中的HashSet

HashSet擴展AbstractSet并實現Set接口。它創建一個使用哈希表進行存儲的集合。哈希表通過使用稱為哈希的機制來存儲信息。在散列中,鍵的信息內容用于確定唯一值,稱為其散列碼。然后,將哈希碼用作存儲與鍵關聯的數據的索引。鍵到其哈希碼的轉換…

mac下的svn服務器建立

MAC下的SVN服務器建立: from : http://blog.csdn.net/q199109106q/article/details/8655204 在Windows環境中,我們一般使用TortoiseSVN來搭建svn環境。在Mac環境下,由于Mac自帶了svn的服務器端和客戶端功能,所以我們可以在不裝任何第三方軟件…

SQL手冊

一.SQL簡介 二.SQL數據類型 三.SQL語法 四.SQL SELECT語句 五.SQL INSERT語句 六.SQL UPDATE語句 七.SQL DELETE語句 八.SQL DROP語句 九.SQL CREDTE語句 十.SQL ALTER 語句總結 十一.SQL事務 十二.函數總結 十三.數據庫其他操作 十四.MySQL 、SQL MS Access、和 SQL Server 數…

python語音合成并播放_使用Python實現文字轉語音并生成wav文件的例子

目前手邊的一些工作,需要實現聲音播放功能,而且僅支持wav聲音格式。 現在,一些網站上支持文字轉語音功能,但是生成的都是MP3文件,這樣還需要額外的軟件來轉成wav文件,十分麻煩。 后來,研究Pytho…

php 字符串 替換 最后,php如何替換字符串中的最后一個字符

php替換字符串中的最后一個字符的方法是:可以通過preg_replace()函數來實現。該函數的語法為:【preg_replace(mixed $pattern, mixed $replacement, mixed $subject】。要替換字符串中的最后一個字符,可以通過preg_replace()函數來實現。(如果…

生日轉換成星座

/// <summary>/// 生日轉換成星座/// </summary>/// <param name"birthday"></param>/// <returns></returns>public static string GetAstro(DateTime birthday){string value string.Empty;int month birthday.Month;int da…