20160821 長連線,socket實時聊天技術

2021-08-07 14:42:08 字數 1706 閱讀 7381

需要模組

tcp/ip 傳輸模式 udp tcp

udp(user datagram protocol)

udp不提供複雜的控制機制,利用ip提供面向無連線的通訊服務。並且它是將應用程式發來的資料在收到的那一刻,立刻按照原樣傳送到網路上的一種機制。

即使是出現網路擁堵的情況下,udp也無法進行流量控制等避免網路擁塞的行為。此外,傳輸途中如果出現了丟包,udo也不負責重發。甚至當出現包的到達順序亂掉時也沒有糾正的功能。如果需要這些細節控制,那麼不得不交給由採用udo的應用程式去處理。換句話說,udp將部分控制轉移到應用程式去處理,自己卻只提供作為傳輸層協議的最基本功能。udp有點類似於使用者說什麼聽什麼的機制,但是需要使用者充分考慮好上層協議型別並製作相應的應用程式。

tcp(transmission control protocol)
tcp充分實現愛呢了資料傳輸時各種控制功能,可以進行丟包的重發控制,還可以對次序亂掉的分包進行順序控制。而這些在udp中都沒有。此外,tcp作為一種面向有連線的協議,只有在確認通訊對端存在時才會傳送資料,從而可以控制通訊流量的浪費。

tcp通過檢驗和、序列號、確認應答、重發控制、連線管理以及視窗控制等機制實現可靠性傳輸。此處不一一敘述。

tcp與udp如何加以區分使用?
tcp用於在傳輸層有必要實現可靠性傳輸的情況。由於它是面向有連線並具備順序控制、重發控制等機制的。所以它可以為應用提供可靠傳輸。

另一方面,udp主要用於那些對高速傳輸和實時性有較高要求的通訊或廣播通訊。舉乙個ip**進行通話的例子。如果使用tcp,資料在傳送途中如果丟失會被重發,但是這樣無法流暢地傳輸通話人的聲音,會導致無法進行正常交流。而採用udp,它不會進行重發處理。從而也就不會有聲音大幅度延遲到達的問題。即使有部分資料丟失,也只是影響某一小部分的通話。此外,在多播與廣播通訊中也使用udp而不是udp。rip、dhcp等基於廣播的協議也要依賴於udp。

tcp與udp區別總結:

tcp面向連線(如打**要先撥號建立連線);udp是無連線的,即傳送資料之前不需要建立連線

tcp提供可靠的服務。也就是說,通過tcp連線傳送的資料,無差錯,不丟失,不重複,且按序到達;udp盡最大努力交付,即不保證可靠交付

每一條tcp連線只能是點到點的;udp支援一對一,一對多,多對一和多對多的互動通訊

tcp首部開銷20位元組;udp的首部開銷小,只有8個位元組

tcp的邏輯通訊通道是全雙工的可靠通道,udp則是不可靠通道

建立服務

var server = net.createserver((socket) => ).on('error', (err) => );

// grab a random port.

server.listen(() => );

把資訊發給所有人

clients.sendall = function(socket,data) else }}

}

連線伺服器

const client = net.connect(, () => );
接收資料

client.on('data', (data) => );
斷開連線

client.on('end', () => );

android中對服務端的長連線 socket

來自於 我們有時候有這種需求,即我們的android客戶端要始終保持與服務端的連線,當服務端有任務或訊息傳送到android客戶端的時候就傳送,沒有任務或訊息的時候不傳送但要保持這個連線,一旦有任務則開發傳送,而我們的android客戶端則要保持乙個時刻接收任務或訊息的狀態。這個時候我們通過sock...

HTTP長連線和WebSocket長連線的區別

要理解http長連線和websocket長連線的區別,首先要理解一下什麼是http的長連線和短連線。首先需要消除乙個誤解 http協議是基於請求 響應模式的,因此客戶端請求後只要服務端給了響應,本次http請求就結束了,沒有長連線這一說。那麼自然也就沒有短連線這一說了。所謂的http分為長連線和短連...

python 連線mysql 使用sock 及引數

加引數指到mysql的配置 mysqldb.connect user root read default file etc my.conf 例如 conn mysqldb.connect host 10.3.18.142 user user,passwd pwd,db db,read default...