中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

TCP socket和web socket的區別是什么

發布時間:2021-12-24 16:32:11 來源:億速云 閱讀:232 作者:柒染 欄目:互聯網科技

TCP socket和web socket的區別是什么,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。


TCP socket和web socket的區別是什么

首先我們來閱讀這段有166個贊的回答:

TCP socket和web socket的區別是什么

When you send bytes from a buffer with a normal TCP socket, the send function returns the number of bytes of the buffer that were sent.
當我們向一個通常的TCP套接字發送一段來自內存buffer中的字節數據時,send系統調用返回的是實際發送的字節數。
If it is a non-blocking socket or a non-blocking send then the number of bytes sent may be less than the size of the buffer.

如果發送數據的目的方套接字是一個非阻塞套接字或者是對寫操作非阻塞的套接字,那么send返回的已發送字節數可能小于buffer中待發送字節數。

If it is a blocking socket or blocking send, then the number returned will match the size of the buffer but the call may block.
如果是阻塞套接字,兩者會相等,因為顧名思義,如果send系統調用沒有把所有待發送數據全部發送,則API調用不會返回。

With WebSockets, the data that is passed to the send method is always either sent as a whole "message" or not at all. Also, browser WebSocket implementations do not block on the send call.

而Web socket和TCP socket的區別,從發送的數據來看,不再是一系列字節,而是按照一個完整的"消息體"發送出去的,這個"消息體"無法進一步再分割,要么全部發送成功,要么壓根就不發送,不存在像TCP套接字非阻塞操作那樣出現部分發送的情況。換言之,Web Socket里對套接字的操作是非阻塞操作。

TCP socket和web socket的區別是什么

這個區別在維基百科上也有清晰闡述:
Websocket differs from TCP in that it enables a stream of messages instead of a stream of bytes

再來看接收方的區別。
原文:
But there are more important differences on the receiving side of things. When the receiver does a recv (or read) on a TCP socket, there is no guarantee that the number of bytes returned correspond to a single send (or write) on the sender side. It might be the same, it may be less (or zero) and it might even be more (in which case bytes from multiple send/writes are received). With WebSockets, the receipt of a message is event driven (you generally register a message handler routine), and the data in the event is always the entire message that the other side sent.

同理,在TCP套接字的場景下,接收方從TCP套接字讀取的字節數,并不一定等于發送方調用send所發送的字節數。而WebSocket呢?WebSocket的接收方從套接字讀取數據,根本不是像TCP 套接字那樣直接用recv/read來讀取, 而是采取事件驅動機制。即應用程序注冊一個事件處理函數,當web socket的發送方發送的數據在接收方應用從內核緩沖區拷貝到應用程序層已經處于可用狀態時 ,應用程序注冊的事件處理函數以回調(callback)的方式被調用。

看個例子:

我通過WebSocket發送一個消息“汪子熙”:

TCP socket和web socket的區別是什么

在調試器里看到的這個字符串作為回調函數的輸入參數注入到函數體內:

TCP socket和web socket的區別是什么

Chrome開發者工具里觀察到的WebSocket消息體:

TCP socket和web socket的區別是什么

下次面試被面試官問到TCP和WebSocket套接字的區別,相信大家應該能夠知道如何回答了。

關于TCP socket和web socket的區別是什么問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

丹江口市| 基隆市| 台湾省| 聂拉木县| 安平县| 盖州市| 永德县| 凭祥市| 大方县| 武冈市| 洛隆县| 郧西县| 栾城县| 福安市| 遵义市| 酉阳| 长治市| 桓台县| 海口市| 札达县| 广西| 黑龙江省| 阳谷县| 金川县| 桂平市| 广南县| 荣昌县| 剑河县| 绥宁县| 池州市| 阿拉善右旗| 八宿县| 璧山县| 肥西县| 永宁县| 株洲市| 库伦旗| 龙山县| 平江县| 龙陵县| 五常市|