昨天在 frontend 社團有 backend 工程師來發問「一個要花費 20 秒的 API,backend 難道不能讓 frontend 等 20 秒再回傳給 frontend 嗎?為什麼有些做法都是先回 201 然後再用 websocket 回傳結果呢?」
當然可以啊,但使用者體驗會很差,這裡把昨天小編的回文拿回來再補充一下。
---
一個 20s 的 request 會遇到幾個問題
1. client 的話的使用者體驗很差,在瀏覽器等了 5s 我就想關網頁了,更何況 20s。
2. 如果使用者在 5s 的時候關網頁,這時候 server 還是會繼續把後面的 15s 處理完。
3. 如果使用者此時又發 request,然後在 7s 的時候又關網頁,這樣子有兩個耗時的工作在後端處理,而且還沒辦法讓前端知道。
4. 使用者都很沒有耐心,如果有 10 個人重複做了 2 3 步,這樣就有 20 個耗時的工作。
5. 如果是 CPU bound task,你的 server 應該會卡死。
6. client 跟 server 各自都有 timeout 的設定,而且 server 前面如果還有擋 nginx 或是其他 cloud provider 的話,光是 timeout 的設定就搞死你了。
---
建議的作法,把真的必要的工作處理完,threshold 最多設 3s,超過的一律丟到 MQ 處理。然後在前端顯示,請他稍後再回來更新網頁,這是最簡單的。每個系統 (OLAP 或 OLTP) 的 threshold 不同,請自行考量。
要不然 polling 也行,每 3 秒拉一次,確認工作是否完成。
最聰明的當然就是透過 push notification 或 websocket 讓 client 得知工作是否已完成。
---
https://hahow.in/cr/kewang-backend
看到這裡,要宣傳小編的後端課程啦!上面回答的這些內容,都會在課程裡面分享喔,還不快去下單!
#backend #frontend #mq
「websocket client」的推薦目錄:
- 關於websocket client 在 Kewang 的資訊進化論 Facebook 的最佳貼文
- 關於websocket client 在 BorntoDev Facebook 的最佳貼文
- 關於websocket client 在 Kewang 的資訊進化論 Facebook 的最佳貼文
- 關於websocket client 在 WebSocket client for Python - GitHub 的評價
- 關於websocket client 在 WebSocket Client in TypeScript - YouTube 的評價
- 關於websocket client 在 Websocket-client functions on_open and on_message don't ... 的評價
- 關於websocket client 在 JavaScript | WebSocket 讓前後端沒有距離 的評價
- 關於websocket client 在 websocket.py - Google Git 的評價
websocket client 在 BorntoDev Facebook 的最佳貼文
🔥 ถามมากันเยอะ ว่าอยากทำเว็บแบบนั้น แบบนี้ต้องรู้อะไรบ้าง !? วันนี้แอดจะมาบอกแนวทางการเรียนรู้ไปพร้อมกันน <3
.
โดยจะต้องบอกคร่าว ๆ ก่อนว่า "ไม่ว่าเราจะทำเว็บอะไร แบบไหนก็แล้วแต่ ล้วนต้องมีพื้นฐานมาก่อนเหมือนกันทั้งสิ้น !!"
.
คล้าย ๆ กับการเรียนภาษาอังกฤษนั่นแหละ ถ้าเราเริ่มต้นเราก็อาจจะต้องเริ่มจากตัวอักษรภาษาอังกฤษ การใช้ Tense ต่าง ๆ ของเว็บก็มีเช่นกัน โดย Basic ของเว็บจะมีเรื่อง
.
✅ HTML
เป็นโครงหลักของเว็บไซต์ทั่วไป โดยหน้าตาของภาษา HTML นั้นจะเป็นการใช้ tag ที่เริ่มต้นด้วย <> แล้วปิดด้วย เพื่อสร้างชิ้นส่วนต่างๆในหน้าเว็บเรียกว่า Element
.
✅ CSS
CSS นั้นเป็นสิ่งที่ช่วยเพิ่มความสวยงามให้กับหน้าตาของเว็บ เราสามารถปรับแต่งหน้าตาของเว็บได้จาก CSS ไม่ว่าจะเป็นสี รูป ไปจนถึงตำแหน่งของสิ่งต่างๆ หรือแม้แต่การทำ animation ก็สามารถทำได้
.
✅ JavaScript
JavaScript นั้นเป็นส่วนที่เพิ่มความสามารถให้กับเว็บของเราเป็นอย่างมาก ทำให้ส่วนต่างๆของเว็บสามารถทำงานได้ตามที่เราต้องการ
.
และ เมือเรารู้พื้นฐานตรงนี้แล้ว เราจะมีเส้นทาง 2 ทางหลักให้เลือก โดยมีทางที่ชื่อว่าสาย Front-End และ Back-End ส่วนถ้าใครชอบทั้งคู่ จนไปครบจบกระบวนการที่เว็บควรมีเราจะเรียกว่า Full-Stack นั่นเอง
.
⭐️ โดยเริ่มจาก Fornt-End กันก่อน
มันเป็นส่วนหน้าตาการแสดงผลของเว็บไซต์ ที่ผู้ใช้งาน(Client)มองเห็นทั้งหมดไม่ว่าจะเป็น ตัวหนังสือ ปุ่ม หรือแถบเมนูต่างๆ ทุกๆส่วนที่ผู้ใช้เห็นและมีปฏิสัมพันธ์ด้วยนับว่าอยู่ใน Frontend ทั้งหมด ซึ่งภาษาที่ใช้ในฝั่ง Frontend ก็คือ HTML, CSS และ JavaScript
.
✅ Framework
สิ่งอำนวยความสะดวกในการเขียนโปรแกรม ซึ่งประกอบด้วยชุดคำสั่งหรือองค์ประกอบต่างๆ ให้เราสามารถนำมาใช้ได้ง่ายๆ โดยไม่ต้องเขียนเองทั้งหมด
.
Js CSS
Angular Bootstrap
Vue.js Materialize
React Semantic UI
Backbone.js Bulma
.
⭐️ ตามมาด้วย Back-End กันต่อ
ส่วนการทำงานประมวลผล และ จัดเก็บข้อมูลของเว็บไซต์ เพื่อทำให้ส่วนของ Frontend สามารถทำงานได้อย่างถูกต้องสมบูรณ์
.
✅ Programming language
เราจะต้องใช้ภาษาโปรแกรมมิ่งในส่วนของการทำงานใน Backend เช่น เมื่อรับข้อมูลสินค้าที่ผู้ใช้เลือกมาจาก Frontend, Backend ก็จะนำมาคำนวนโปรโมชั่นแล้วนำมาหักลบกับเงินในบัญชีจากนั้นเก็บข้อมูลใน Database เป็นต้น
.
PHP
Python
C#
Java
JavaScript
Ruby
.
✅ Framework
สิ่งอำนวยความสะดวกในการเขียนโปรแกรม ซึ่งประกอบด้วยชุดคำสั่งหรือองค์ประกอบต่างๆ ให้เราสามารถนำมาใช้ได้ง่ายๆ โดยไม่ต้องเขียนเองทั้งหมด
Django
Express.js
Flask
Laravel
Ruby on Rails
ASP.NET
.
⭐️ส่วนสำคัญอื่นๆ
นอกจากส่วนของการแสดงผลและการติดต่อกับผู้ใช้อย่าง Frontend และ ส่วนของการทำงานด้านหลังของระบบอย่าง Backend แล้ว การเขียนเว็บยังมีส่วนที่สำคัญที่ขาดไปไม่ได้ เช่น ส่วนของการรับส่งข้อมูล
.
✅ API
Application Programming Interface เป็นช่องทางในการเข้าถึงข้อมูลต่างๆ ของเว็บไซต์ ไม่ว่าจะเป็นการอ่านเขียนข้อมูลจากฐานข้อมูลจาก server ไปจนถึงข้อมูลจากภายนอก
.
✅ WebSocket
วิธีการติดต่อเพื่อรับส่งข้อมูลแบบระหว่าง Client กับ Server โดยแต่ละฝั่งสามารถส่งข้อมูลไปหาอีกฝั่งตอนไหนก็ได้ เหมาะสำหรับรับส่งข้อมูลแบบ real-time
.
"ทั้งหมดนี้ก็เป็นเส้นทาง Path คร่าว ๆ ของสายเว็บ หากใครชอบของสวย ๆ งาม ๆ ก็อาจจะทำส่วนหน้าบ้าน ใครชอบ Logic จัด ๆ มาหลังบ้านก็สนุกไม่น้อยนะแอดว่าาา <3"
.
#borntoDev - 🦖 สร้างการเรียนรู้ที่ดีสำหรับสายไอทีในทุกวัน
websocket client 在 Kewang 的資訊進化論 Facebook 的最佳貼文
最近總算拿到了小編 2014 年在 Mobile Open Platform Conference 分享的「How to build a scalable SNS via Polling & Push」演講影片,內容主要是在分析各種 client-server 同步時的網路模型,其中包括當時正紅的 Socket.IO,也有提到當時小編家產品的網路模型。
* Polling
* Comet
* Long Polling
* WebSocket
* Engine.IO (Socket.IO)
* Polling & Push
---
後面則是現在已經是大家都懂的 RESTful API 的設計原則及 API 文件的撰寫方式。這就不另外提了,當時還算是比較新的東西,現在過了四年其實也不用多提了 XD
---
這個題目也是當年在 DataCon.TW (前身 HadoopCon) 的「How to build a scalable SNS using HBase」續篇,HadoopCon 講的偏後端,MOPCON 講的偏前端,如果想了解即時通訊軟體的開發眉角,這兩篇可以一起看。
---
其實現在放這篇出來,也可以呼應上星期小編在 JCConf.tw 的「那些大家常忽略的 Cache-Control」,用了 polling 的方式,就要想辦法減少不必要的網路請求產生,大家看完這兩篇之後,應該就更有感覺了!
---
* 投影片:https://www.facebook.com/kewang.information/posts/1694794534130247
* HadoopCon 2014:https://www.facebook.com/kewang.information/posts/1751552835121083
* JCConf 2018:https://www.facebook.com/kewang.information/posts/2192127034396992
#mopcon #socketio #websocket #synchronous #polling
websocket client 在 WebSocket Client in TypeScript - YouTube 的推薦與評價
How to build a client for real-time communication with WebSockets in TypeScript using the ws NPM package. Join the conversation on Discord ... ... <看更多>
websocket client 在 WebSocket client for Python - GitHub 的推薦與評價
websocket -client is a WebSocket client for Python. It provides access to low level APIs for WebSockets. websocket-client implements version hybi-13 of the ... ... <看更多>
相關內容