🔥 มารู้จักพื้นฐาน Web Socket กันเถอะ !!
.
😆 สวัสดีจ้าเพื่อนๆ วันนี้แอดสรุปพื้นฐาน Web Socket มาให้เพื่อนๆ อ่าน และ ทำความเข้าใจกัน มันคืออะไร ทำงานยังไง มีข้อดีอะไรบ้าง มาหาคำตอบไปพร้อมกันเลยจ้า
.
👨💻 Web Socket เป็นโปรโตคอล TCP รองรับ Full Duplex หรือการทำงานแบบสองทิศทาง ออกแบบมาเพื่อการใช้งานบนเว็บเบราว์เซอร์และเว็บเซิร์ฟเวอร์ ใช้ในระบบที่ต้องการการอัปเดตข้อมูลแบบ Realtime เช่น Chat, Notification, ระบบหุ้น, Game, ฯลฯ
.
🖥️ วิธีการทำงาน
👉 1) เริ่มจากรัน Service ที่เป็น Protocal ฝั่ง Server
👉 2) เมื่อ Client เชื่อมต่อเข้ามา Service นั้นๆ จะทำการติดตามและตรวจสอบว่า Client มีการเชื่อมต่อและพร้อมจะรับ-ส่ง ข้อมูลหรือไม่
👉 3) หาก Server มีข้อมูลใหม่ Service เหล่านั้นก็จะทำการ Push หรือ Response ข้อมูลให้กับทุก Client ที่ทำการเชื่อมต่ออยู่นั่นเอง
.
❤️ ข้อดี
รับ-ส่งข้อมูลได้อย่างรวดเร็ว
เหมาะสำหรับเว็บไซต์ที่แสดงผลแบบ Realtime
ไม่ต้อง Refresh หน้าเพจบ่อยๆ
.
พอจะเข้าใจพื้นฐาน Web Socket กันขึ้นมาบ้างแล้วเนอะ หวังว่าจะเป็นประโยชน์กับเพื่อนๆ ไม่มากก็น้อยนะจ้ะ 😍
.
borntoDev - 🦖 สร้างการเรียนรู้ที่ดีสำหรับสายไอทีในทุกวัน
tcp socket 在 矽谷牛的耕田筆記 Facebook 八卦
ref: https://www.hwchiu.com/ping-implementation.html
本篇文章是難得的自產文章,該文章分享一下自己觀察不同 ping 指令與不同發行版本下的實作方式,主要探討的點是 ICMP 封包是如何產生的。
就我目前認知,目前至少有三種常見方式來設定 ping 指令讓其能夠順利收送 ICMP 封包。
常見的 TCP/UDP 應用程式實際上都是讓 Kernel 幫忙處理底層的 L3/L4 封包,使用者的應用程式則是專注於資料的交換與處理,簡單的說法就是專心處理 L7 資料。
但是 ICMP 封包不同於上述的 TCP/UDP 封包,一種方式就是透過 RAW Socket 的形式自行去拼湊組裝 ICMP 格式,自行處理一切封包的處理。
RAW Socket 本身也不允許每個使用者都能輕易開啟,必須要有相關的權限才可以執行,因此一種 PING 的實作方式就是透過 SetUID 的方式,讓所有能夠執行 ping 指令的使用者會短暫瞬間提權變成 Root 的身份
也因為是 Root 就可以順利的開啟 RAW Socket。
SetUID 強大且方便,簡簡單單就可以讓使用者瞬間變成 Root,但是也因為簡單好像就安全角度來看會覺得不太嚴謹,畢竟我想要的只是一個能夠開啟 RAW Socket 的權限,你去把整個 Root 都送給我。
因此第二種實作方式就是透過 Linux Capability 來達到更細緻化的權限控管,讓任何可以執行 ping 指令的使用者都可以短暫獲得 cap_net_raw 的權限,最終順利的開啟 RAW Socket
而第三種方式則是跳脫的權限的概念,與其透過 RAW Socket 來自行打造 ICMP 封包,不如讓 Linux Kernel 幫忙處理 ICMP 封包,ping 的程式只要跟 Kernel 要求建立一個基於 ICMP 協定的 socket 即可。
透過第三種方式最終可以達到 setuid-less 的架構,ping 的應用程式再也不需要任何的特殊權限,每個使用者都可以順利執行來收送 ICMP 封包。
文章內會針對三種方式進行實驗跟觀察,對 PING 指令有興趣別忘了參考看看
tcp socket 在 矽谷牛的耕田筆記 Facebook 八卦
ref: https://medium.com/100-days-of-linux/how-to-deal-with-too-many-open-files-log-storm-c617ba84143b
本文是一個經驗分享文,作者分享其 HTTP Server 遇到 599: Network Connection Timed out Error 錯誤時的除錯經驗。
作者發現到該錯時,趕緊檢查 Server 的錯誤訊息然後得到了下列內容
HTTP: Accept error: accept tcp [::]:
這個錯誤訊息非常明確,告知該 Server 開啟太多檔案了,導致沒有辦法繼續處理後續的網路請求。
不過對於不熟悉 Linux 系統設計的使用者來說這個錯誤訊息就不夠明顯,實際上 Linux 系統內所有的網路 Socket 底層都是一個又一個檔案結構(FD),所以該錯誤訊息也可以解釋為該 Server 開啟了過多的 Socket ,已經超過系統設定上限。
作者使用下列指令來找到當前開啟的 Socket(FD) 數量
lsof -u
為了解決這個問題,作者認為有兩個方向可以去嘗試
1. 提高整個 Server 能夠開啟的 Socket 數量上限
2. 確保 Server 將所有卡住沒使用的 Socket 都清除收回
後半部分文章作者介紹如何使用 ulimit 這個指令來觀察系統當前的設定,包含soft limit 以及 hard limit 兩種類型的差別,如何針對 socket 的部分來調高設定。
對於這方面有興趣的讀者可以閱讀一下,本篇文章滿短的,很快就可以消化完畢
tcp socket 在 TCP Socket States - Networking - YouTube 的八卦
... <看更多>