天天看點

一幅圖檔引發的離婚大戰

一幅圖檔引發的離婚大戰

碼小辮專注更多程式設計視訊和電子書

一幅圖檔引發的離婚大戰

天天在用錢

今天看到這兩幅圖檔,不禁哈哈大笑。網際網路上很多段子或者笑話,其實最能引起笑果的往往來自于真實生活,而不是那些為了笑果而編造的段子。 

一幅圖檔引發的離婚大戰
一幅圖檔引發的離婚大戰

 微信真的會因為網絡不好而造成資訊的前後颠倒嗎?真的會。 為什麼呢?馬化騰說微信就是一個郵箱,隻是這個郵箱比較快,讓你感受不到這是一個郵箱,而讓你有一種即時通信的錯覺。 微信這個郵箱是這麼來工作的:Alice登入微信伺服器,認證身份,上線狀态。這是一個基于TCP的長連接配接,安全加密。所謂長連接配接,就是Alice隻要不是手機沒電或者關機狀态,這個長連接配接一直都是運作且雙向可以通信的。這個負責登入的伺服器,簡稱登入伺服器。 Alice給Bob發了一段文字,“Are you kidding me?”敲回車。這段文字是通過上文的長連接配接發送的嗎? 不是的。而是通過一個短連接配接發送的,這個短連接配接是Alice點開Bob頭像才建立的,這是一個 TCP + MMTLS(安全加密)+ http封裝的短連接配接。 然後這個消息就被短連接配接以http格式發出去了。這個消息是直接發給Bob的嗎?不是的,而是發給Bob的郵箱。 Bob的郵箱是在Bob的手機裡、還是微信存儲伺服器裡? 微信伺服器。 這樣做有什麼好處呢?假如Bob在飛機上,手機關機,Alice消息依然可以将消息發出。如果直接發給Bob手機,手機都關機了,那就壓根無法建立連接配接,自然連消息都發不出。當然好處還有許多,比如Alice與Bob的手機都位于NAT裝置的後方,他們之間的直接通信不一定100%成功。 如果Bob是線上狀态,登入伺服器會第一時間通過TCP長連接配接,通知Bob微信郵箱裡有信,至于這封信存在郵箱的什麼地方,這是一個http格式的連結。Bob微信會與連結所對應的存儲伺服器建立短連結,将消息下載下傳并顯示到本地視窗,然後關閉短連接配接。 如果Bob是離線狀态,微信伺服器其實也不急的,反正消息呆在存儲伺服器,不會飛的。等Bob下飛機上線了第一時間通知Bob微信就好了。 以上就是微信的工作流程。接下來講為何微信會發生消息後發先至的情況? 微信每次敲完一段文字,點選“發送“,這個消息就觸發了一次: 

  • 短連接配接的建立
  • 消息的傳輸
  • 短連接配接的斷開

 這個是标準的三步曲。當你再次發一段文字時,又觸發了一次三步曲。兩次的三步曲是互相獨立的。 在網絡暢通時,Alice第一個消息很快就發到Bob的郵箱,并被Bob微信呈現在視窗裡。Alice第二個消息發出的晚,自然到達得晚,這是非常好了解的。 但是當網絡不好時,第一個三步曲的消息封包不是那麼幸運,丢了,然後Alice的手機一直在重傳這個消息。Alice又發送第二個消息,運氣特别好,沒有丢,結果比第一個消息早到了幾秒。 既然微信講究及時通信,微信會第一時間通知Bob的微信,隻是這個消息通知順序,先是第二個消息,然後才是第一個消息。這樣就造成了微信消息時序的颠倒。 最後,每一段消息内部文字并沒有颠倒,對嗎?這就是TCP的功勞,因為短連接配接依然使用的是TCP做為傳輸協定,TCP最擅長做的就是保證每一個位元組按照先後順序到達。TCP是一個可靠協定,可以修複由于網絡暫時的中斷而造成的位元組丢失。但是如果Alice向Bob郵箱上傳信的時候,網絡發生了長時間的中斷,超出了TCP最大修複時間,這時微信會提示Alice,消息發送失敗!

最最後,祝大家520快樂!

-END-

關注視訊号,參與留言送書活動

↓↓↓↓

一幅圖檔引發的離婚大戰
一幅圖檔引發的離婚大戰
一幅圖檔引發的離婚大戰
一幅圖檔引發的離婚大戰

繼續閱讀