ความแตกต่างระหว่างซ็อกเก็ตและ websocket


178

ฉันกำลังสร้างแอปพลิเคชันเว็บที่ต้องการสื่อสารกับแอปพลิเคชันอื่นโดยใช้การเชื่อมต่อซ็อกเก็ต นี่คือดินแดนใหม่สำหรับฉันดังนั้นต้องการให้แน่ใจว่าซ็อกเก็ตที่แตกต่างกันกว่าWebSockets ดูเหมือนว่าพวกเขาจะคล้ายกันกับแนวคิดเท่านั้น

ถามเพราะในตอนแรกฉันวางแผนที่จะใช้ Django เป็นพื้นฐานสำหรับโครงการของฉัน แต่ในโพสต์ SO ฉันเชื่อมโยงกับด้านบนมันชัดเจนมากว่า websockets เป็นไปไม่ได้ (หรืออย่างน้อยก็ไม่น่าเชื่อถือแม้จะมี django-websockets ) โดยใช้การตั้งค่า Django ที่ต้องการ (Apache กับ mod_wsgi) แต่ฉันได้พบการโพสต์อื่น ๆ ที่ตั้งใจนำเข้าโมดูลซ็อกเก็ต ธ สำหรับสิ่งที่ง่ายเป็นโลภชื่อโฮสต์ของเซิร์ฟเวอร์

ดังนั้น:

  • พวกเขาแตกต่างกันจริง ๆ ?
  • มีเหตุผลใดที่จะไม่ใช้ Django สำหรับโครงการที่อาศัยการเชื่อมต่อซ็อกเก็ตกับเซิร์ฟเวอร์ภายนอกหรือไม่?

คำตอบ:


141

เพื่อตอบคำถามของคุณ

  1. ถึงแม้ว่าพวกเขาประสบความสำเร็จ (ทั่วไป) สิ่งที่คล้ายกันใช่พวกเขามีความแตกต่างกันจริงๆ WebSockets ทำงานมักจะมาจากเบราว์เซอร์ที่เชื่อมต่อกับ Application Server มากกว่าโปรโตคอลคล้ายกับHTTPที่วิ่งมากกว่าTCP / IP ดังนั้นสำหรับแอปพลิเคชันเว็บที่ต้องการการเชื่อมต่อถาวรกับเซิร์ฟเวอร์เป็นหลัก ในทางตรงกันข้ามซ็อกเก็ตธรรมดามีประสิทธิภาพและทั่วไปมากกว่า มันทำงานผ่านTCP / IPแต่ไม่ จำกัด เฉพาะเบราว์เซอร์หรือโปรโตคอลHTTP พวกเขาสามารถใช้ในการสื่อสารแบบใดก็ได้
  2. ไม่ไม่มีเหตุผล

128
WebSockets ไม่เหมือนกับ HTTP พวกเขาเป็นซ็อกเก็ตปกติที่มีกรอบและจับมือกันได้กับ HTTP แฮนด์เชคที่เข้ากันได้กับ HTTP เป็นเพียงการอนุญาตให้เชื่อมต่อ WebSocket บนพอร์ตเดียวกับที่เว็บเซิร์ฟเวอร์กำลังทำงานอยู่ (เพื่อให้เว็บเซิร์ฟเวอร์สามารถส่งต่อได้) แต่เมื่อการเชื่อมต่อเสร็จสิ้นเว็บเซิร์ฟเวอร์จะไม่อยู่ในลูป WebSockets ไม่ จำกัด ไคลเอ็นต์เบราว์เซอร์ ดูที่libwebsocketซึ่งมีทั้งไคลเอ็นต์ที่ไม่ใช่เบราว์เซอร์และเซิร์ฟเวอร์
kanaka

14
ตกลง. ฉันเห็น ... เนื่องจากฉันไม่สามารถลบคำตอบที่ยอมรับนี้ได้ฉันจึงขอให้คุณแก้ไขด้วยข้อมูลที่ถูกต้อง ขอบคุณ!
Pablo Santa Cruz

2
คุณสามารถสร้างไคลเอนต์ websocket และใช้นอกเบราว์เซอร์ โปรโตคอล websocket คือ HTTP 1.1 พร้อมการเชื่อมต่อที่อัปเกรดเป็น "websocket"
Roger F. Gay

2
@huggie nope มีกรอบเล็กน้อย: tools.ietf.org/html/rfc6455#section-5 (2 ไบต์สำหรับข้อความขนาดเล็ก)
kanaka

2
@NiCkNewman ซึ่งอาจเป็นคำถามที่แยกกันจริงๆ ค่าใช้จ่ายในการวางกรอบน้อยและไม่มีปัญหา ปัญหาเกี่ยวกับ WebSockets สำหรับการเชื่อมต่อเครือข่าย MMO นั้นเป็นสองเท่า: เป็นเซิร์ฟเวอร์ไคลเอ็นต์เท่านั้นและเป็น TCP (สตรีมตาม) สำหรับประสิทธิภาพของระบบเครือข่าย MMO ที่ดีคุณต้องมีระบบเครือข่ายแบบ peer-to-peer โดยตรงและคุณต้องการดาต้าแกรม ข่าวดีก็คือ WebRTC DataChannel มีคุณสมบัติเหล่านี้ทั้งสองจึงจะเริ่มเติมเต็มช่องว่างและอนุญาตให้เกม AAA MMO เต็มรูปแบบในเบราว์เซอร์
kanaka

21

เว็บซ็อกเก็ตใช้ซ็อกเก็ตในการติดตั้ง เว็บซ็อกเก็ตใช้โปรโตคอลมาตรฐาน (ตอนนี้อยู่ในการโทรครั้งสุดท้าย แต่ยังไม่สิ้นสุด) ซึ่งกำหนดการเชื่อมต่อ "จับมือ" และข้อความ "เฟรม" ทั้งสองฝ่ายผ่านขั้นตอนการจับมือกันเพื่อยอมรับการเชื่อมต่อและจากนั้นใช้รูปแบบข้อความมาตรฐาน ("กรอบ") เพื่อส่งข้อความกลับไปกลับมา

ฉันกำลังพัฒนาเฟรมเวิร์กที่จะช่วยให้คุณสามารถสื่อสารเครื่องจักรกับซอฟต์แวร์ที่ติดตั้งโดยตรงได้โดยตรง มันอาจเหมาะกับวัตถุประสงค์ของคุณ คุณสามารถติดตามบล็อกของฉันหากคุณต้องการ: http://highlevellogic.blogspot.com/2011/09/websocket-server-demonstration_26.html


11

คุณต้องใช้ WebSockets (หรือโมดูลโปรโตคอลที่คล้ายกันบางอย่างเช่นที่สนับสนุนโดยปลั๊กอิน Flash) เนื่องจากแอปพลิเคชันเบราว์เซอร์ปกติไม่สามารถเปิดซ็อกเก็ต TCP บริสุทธิ์ได้

Socket.IOโมดูลพร้อมใช้งานสำหรับnode.jsสามารถช่วยมาก แต่ทราบว่ามันไม่ได้โมดูล WebSocket บริสุทธิ์ในสิทธิของตนเอง

เป็นโมดูลการสื่อสารทั่วไปที่สามารถทำงานบนโปรโตคอลเครือข่ายอื่น ๆ รวมถึง WebSockets และซ็อกเก็ตแฟลช

ดังนั้นหากคุณต้องการใช้Socket.IOบนเซิร์ฟเวอร์คุณต้องใช้รหัสลูกค้าและวัตถุ คุณไม่สามารถทำการWebSocketเชื่อมต่อแบบraw กับsocket.ioเซิร์ฟเวอร์ได้อย่างง่ายดายเนื่องจากคุณต้องจำลองโปรโตคอลข้อความ


11

WebSocket เป็นเพียงอีกหนึ่งโปรโตคอลระดับแอปพลิเคชันผ่านโปรโตคอล TCP เช่นเดียวกับ HTTP

ตัวอย่างบางส่วน <Spring in Action 4> ยกมาด้านล่างหวังว่าจะช่วยให้คุณเข้าใจ WebSocket ได้ดีขึ้น

ในรูปแบบที่ง่ายที่สุด WebSocket เป็นเพียงช่องทางการสื่อสารระหว่างสองแอปพลิเคชัน (ไม่จำเป็นต้องมีเบราว์เซอร์ที่เกี่ยวข้อง) ... การสื่อสาร WebSocket สามารถใช้ระหว่างแอปพลิเคชันทุกชนิดแต่การใช้ WebSocket ที่พบบ่อยที่สุดคือ แอปพลิเคชันเซิร์ฟเวอร์และแอปพลิเคชันที่ใช้เบราว์เซอร์


2

เกี่ยวกับคำถามของคุณ (b) โปรดทราบว่าข้อกำหนดของ Websocket ยังไม่สิ้นสุด ตามW3C :

ผู้ปฏิบัติงานควรทราบว่าข้อกำหนดนี้ไม่มั่นคง

โดยส่วนตัวฉันถือว่า Websockets เป็น waaay เกินกว่าขอบที่จะใช้ในปัจจุบัน แม้ว่าฉันจะพบว่ามีประโยชน์ในหนึ่งปีหรือมากกว่านั้น


แล้ว 9 ปีต่อมาล่ะ
Venryx
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.