ความแตกต่างระหว่าง webhook และ websocket


86

ฉันอยากจะแชทแบบเรียลไทม์มาโดยตลอด

ฉันเคยทำเมื่อหลายปีก่อนใน PHP + Ajax + Mysql และเซิร์ฟเวอร์ของฉันพัง จากนั้นฉันก็ลองใช้ Flash + ไฟล์ข้อความ ฉันยอมแพ้และไม่ได้พยายามเลยใน 10 ปี แต่เมื่อไม่นานมานี้ฉันได้ยินเกี่ยวกับ webhooks และ websockets และทั้งสองดูเหมือนจะเป็นวิธีที่จะทำ แต่ฉันไม่ค่อยเข้าใจความแตกต่าง ใครสามารถอธิบาย?

คำตอบ:


236

เว็บฮุค

Webhooksใช้สำหรับการสื่อสารระหว่างเซิร์ฟเวอร์กับเซิร์ฟเวอร์ พวกเขาทำงานโดยเซิร์ฟเวอร์หนึ่งบอกเซิร์ฟเวอร์อื่นว่าต้องการข้อมูลที่ส่งไปยัง URL ที่แน่นอนเมื่อมีบางอย่างเกิดขึ้น

บทความนี้พูดถึงการใช้ webhooks ในบริการยอดนิยม องค์กรนี้พูดมากเกี่ยวกับการใช้งานในบริบทของ RESTful API

Websockets

Websocketsคือ (โดยปกติ) สำหรับการสื่อสารระหว่างเซิร์ฟเวอร์กับเบราว์เซอร์ เซิร์ฟเวอร์โฮสต์เซิร์ฟเวอร์ websocket และไคลเอนต์สามารถเปิดการเชื่อมต่อกับเซิร์ฟเวอร์นั้นได้ นี้เป็นที่นิยมในขณะนี้ส่วนใหญ่เป็นเพราะมันเป็นได้เร็วขึ้นและน้อยทรัพยากร hogging กว่าวิธีเก่าของการแก้ปัญหาที่เกิดขึ้นเช่นยาวเลือกตั้ง / COMET

เป็นไปได้ที่จะเชื่อมต่อเซิร์ฟเวอร์ 2 เครื่องโดยใช้เว็บซ็อกเก็ต แต่โดยทั่วไปแล้วจะไม่ใช้สำหรับ

ความสับสน

แม้ว่าหนึ่งในนั้นจะเป็นเซิร์ฟเวอร์ (เฉพาะ) เซิร์ฟเวอร์และอีกอันคือเบราว์เซอร์เซิร์ฟเวอร์ (ส่วนใหญ่) เทคโนโลยีเหล่านี้มักถูกพูดถึงในที่เดียวกันเกือบจะเหมือนกับว่าพวกเขากำลังแก้ปัญหาเดียวกัน ถ้าคุณมองขึ้นพอโซ่สูงคุณจะเห็นว่าพวกเขาทั้งสองแก้ปัญหาของเวลาจริง "" การสื่อสาร แต่พวกเขาแก้ปัญหาด้านต่างๆของปัญหานี้ในรูปแบบที่แตกต่างกันมาก

สถานการณ์หนึ่งที่อาจมีการเปรียบเทียบโดยตรงคือหากคุณกำลังสร้าง API ที่เซิร์ฟเวอร์ของบุคคลที่สามจะใช้งาน ในสถานการณ์ที่คุณสามารถให้API webhookหรือWebSocket API ทั้งสองอนุญาตให้บุคคลที่สามรับการอัปเดตอย่างรวดเร็ว:

  • หากคุณเลือกเว็บฮุกบุคคลที่สามนั้นจะยังคงต้องหาวิธีที่จะผลักดันการเปลี่ยนแปลงที่คุณแจ้งให้พวกเขาทราบไปยังเบราว์เซอร์ของลูกค้า
  • หากคุณให้ websocket API บุคคลที่สามสามารถตั้งค่าไซต์ของตนได้เพื่อให้ผู้ใช้แต่ละคนเชื่อมต่อโดยตรงกับ websocket API ของคุณและเซิร์ฟเวอร์ของพวกเขาจะต้องทำงานน้อยลง

1
นั่นเป็นคำตอบที่ยอดเยี่ยม! ขอบคุณมาก!
David 天宇 Wong

4
Websockets มักใช้สำหรับการสื่อสารไคลเอนต์เซิร์ฟเวอร์ แต่ไม่ จำกัด เพียงแค่นั้น สามารถใช้สำหรับการสื่อสารระหว่างเซิร์ฟเวอร์กับเซิร์ฟเวอร์ได้เช่นกัน
Pithikos

ทั้งใน websocket และ webhook ซ็อกเก็ตเปิดอยู่ตลอดเวลาหรือไม่? การเชื่อมต่อเซิร์ฟเวอร์ 10,000 เครื่องช่วยลดการกอดหรือไม่?
Thellimist

3
Websockets จะเปิดซ็อกเก็ตทั้งบนไคลเอนต์และเซิร์ฟเวอร์ตลอดระยะเวลาของการสนทนา (สิ่งนี้ทำให้เซิร์ฟเวอร์มีสถานะซึ่งทำให้การปรับขนาดยุ่งยากขึ้น) Webhooks ต้องการซ็อกเก็ตเพื่อเปิดบนเซิร์ฟเวอร์ บนไคลเอนต์ซ็อกเก็ตจะเปิดขึ้นสำหรับคำขอเท่านั้น (เช่นเดียวกับคำขอ HTTP อื่น ๆ ) Webhooks อาจมีราคาแพงทั้งในไคลเอนต์ (หากคุณต้องการแจ้งเซิร์ฟเวอร์จำนวนมากเมื่อมีอะไรเกิดขึ้น) หรือบนเซิร์ฟเวอร์ (หากคุณต้องการฟังการอัปเดตจากไคลเอนต์จำนวนมาก) แต่ทั้งคู่ใช้ HTTP และเป็น มีโซลูชันมากมายสำหรับการปรับขนาดบริการ HTTP
Turtlemonvh

18

นี่คือข้อมูลเพิ่มเติมบางส่วนสำหรับการเลือกระหว่าง webhooks และ websockets

การสื่อสารระหว่างเซิร์ฟเวอร์กับเซิร์ฟเวอร์ผ่านเว็บซ็อกเก็ตได้รับความนิยมจากแอปแชทบอทรุ่นใหม่ ปัจจุบันแชทบอทจำนวนมากทำงานบนเว็บซ็อกเก็ตโดยมีข้อได้เปรียบหลักในการไม่ต้องการ URL ที่เปิดเผยต่อสาธารณะสำหรับบ็อตภายในและส่วนตัว ในสภาพแวดล้อมนี้ต่อไปนี้เป็นแนวทางบางประการเกี่ยวกับเวลาที่ควรพิจารณาใช้ webhooks กับ websockets

Websockets

  • หากแอปของคุณเป็นแอปเบราว์เซอร์ให้ใช้ websockets เนื่องจากแอปของคุณไม่สามารถรับเว็บฮุกได้
  • หากแอปของคุณเป็นแอปเซิร์ฟเวอร์ที่รับข้อความจากบริการผ่านอินเทอร์เน็ตและคุณไม่ต้องการเปิดไฟร์วอลล์ให้พิจารณาเว็บซ็อกเก็ต บาง บริษัท ต้องการการตรวจสอบความปลอดภัยของข้อมูลก่อนที่จะเปิดการเชื่อมต่อดังกล่าว

เว็บฮุค

  • หากแอปเซิร์ฟเวอร์แอปของคุณจำเป็นต้องสมัครสมาชิกจำนวนมากให้เตรียมพร้อมที่จะรองรับปริมาณการเชื่อมต่อ websocket ที่เปิดอยู่กับเซิร์ฟเวอร์ของคุณ ( ดูบทความนี้สำหรับการเชื่อมต่อ websocket 1M ) หรือเปลี่ยนไปใช้เว็บฮุค แชทบอทยอดนิยมบางตัวได้ย้ายจากเว็บซ็อกเก็ตไปยังเว็บฮุกเพื่อปรับปรุงความสามารถในการปรับขนาด
  • หากแอปเซิร์ฟเวอร์ของคุณทำงานเป็นฟังก์ชันคลาวด์บน (AWS Lambda, Google Cloud Functions ฯลฯ ) ให้ใช้ webhooks เนื่องจากแอปของคุณจะไม่เปิดการเชื่อมต่อ websocket ไว้
  • หากแอปเซิร์ฟเวอร์ของคุณทำงานบน Heroku free tier ให้ใช้ webhooks เนื่องจาก Dyno ของคุณจะเข้าสู่โหมดสลีปและต้องเข้าสู่โหมดสลีปเป็นเวลา 6 ชั่วโมงต่อวันเว้นแต่คุณจะสั่งให้เซิร์ฟเวอร์ของคุณเข้าสู่โหมดสลีปด้วยตนเอง
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.