คำถามติดแท็ก websockets

2
ประสิทธิภาพเป็นเหตุผลเดียวที่ไม่ใช้ SignalR (websockets) ทั้งหมดแทน REST API แบบดั้งเดิมหรือไม่
ฉันเคยใช้SignalRฟังก์ชั่นส่งข้อความตามเวลาจริงในหลายโครงการของฉัน ดูเหมือนว่าจะทำงานได้อย่างน่าเชื่อถือและง่ายต่อการเรียนรู้ที่จะใช้ อย่างน้อยที่สุดสิ่งล่อใจสำหรับฉันคือการละทิ้งการพัฒนาบริการ Web API และใช้SignalRสำหรับทุกสิ่ง ฉันรู้สึกว่าสิ่งนี้สามารถทำได้โดยการออกแบบอย่างรอบคอบและถ้าเป็นเช่นนั้นก็จะหมายความว่ารหัสลูกค้าน้อยกว่าจะจำเป็น ที่สำคัญกว่านั้นก็หมายความว่าจะมีอินเทอร์เฟซเดียวกับบริการมากกว่าแยกส่วนและในกรณีที่เลวร้ายที่สุดที่หนึ่งสามารถเชื่อมต่อนี้โดยไม่ต้องคิดเกี่ยวกับเมื่อสิ่งที่ได้รับการแสดง ฯลฯ ดังนั้นฉันอยากรู้ว่า: มีเหตุผลอื่นใดอีกหรือไม่ที่จะไม่ใช้ SignalR แทนบริการเว็บทั้งหมดนอกเหนือจากประสิทธิภาพ ประสิทธิภาพของ SignalR นั้นเพียงพอหรือไม่เกี่ยวกับเรื่องนี้ มันเป็นความฝันของฉันมานานแล้วที่จะสามารถแปลวัตถุฝั่งเซิร์ฟเวอร์และคำจำกัดความการบริการเป็นรหัสการเข้าถึงบริการฝั่งไคลเอ็นต์โดยไม่มีอะไรโง่node.jsๆ ตัวอย่างเช่นถ้าฉันกำหนดวัตถุที่น่าสนใจInterestingObjectและบริการไปCRUDยังวัตถุInterestingObjectServiceฉันสามารถกำหนดเส้นทาง URL มาตรฐานไปยังบริการ - พูดว่า "/ {serviceName} / {methodName}" - แต่ฉันยังคงต้องเขียนรหัสลูกค้าเพื่อเข้าถึง บริการ. เนื่องจากวัตถุจะถูกส่งผ่านจากไคลเอนต์ไปยังเซิร์ฟเวอร์และย้อนกลับจึงไม่มีเหตุผลเชิงปฏิบัติที่จะมีเพื่อกำหนดวัตถุอย่างชัดเจนในรหัสฝั่งไคลเอ็นต์และไม่จำเป็นต้องกำหนดเส้นทางเพื่อดำเนินการ CRUD อย่างชัดเจน ฉันรู้สึกว่าควรมีวิธีที่จะทำให้มาตรฐานทั้งหมดนี้เป็นไปได้ในการเขียนไคลเอนต์ภายใต้สมมติฐานที่ว่าการเข้าถึงบริการทำงานจากไคลเอนต์ไปยังเซิร์ฟเวอร์และกลับมาอย่างโปร่งใสเหมือนที่ฉันเขียน WinForms หรือ Java Applet หรือ Native App หรือสิ่งที่มีคุณ หาก SignalR นั้นดีพอที่จะใช้แทนเว็บเซอร์วิสแบบดั้งเดิมมันอาจเป็นวิธีที่ปฏิบัติได้เพื่อให้บรรลุเป้าหมายนี้ SignalR มีฟังก์ชั่นเพื่อทำให้ฮับทำงานเหมือนบริการที่ฉันอธิบายดังนั้นฉันสามารถกำหนดบริการทั่วไป (CRUD) ที่จะให้ฟังก์ชั่นทั้งหมดนี้นอกกรอบพร้อมภาพสะท้อนบางอย่าง จากนั้นฉันเกือบจะสามารถรับสิทธิ์ในการเข้าถึงบริการได้ช่วยให้ฉันรำคาญกับการเขียนรหัสใหม่เพื่อเข้าถึงสิ่งที่สามารถเข้าถึงได้โดยการประชุม - …

2
วิธีสร้างสถาปัตยกรรมเว็บแอปพลิเคชั่นบนเว็บแบบเรียลไทม์ที่มีน้ำหนักมาก
ในกระบวนการพัฒนาแอปพลิเคชั่นหน้าเดียวแบบเรียลไทม์ฉันได้ปรับใช้เว็บซ็อกเก็ตอย่างต่อเนื่องเพื่อช่วยให้ผู้ใช้ของฉันมีข้อมูลที่ทันสมัย ในช่วงนี้ฉันเสียใจที่สังเกตว่าฉันทำลายโครงสร้างแอปมากเกินไปและฉันไม่สามารถหาวิธีแก้ไขปรากฏการณ์นี้ได้ ก่อนที่จะทำความเข้าใจโดยเฉพาะบริบทเพียงเล็กน้อย: webapp เป็นเรียลไทม์ SPA แบ็คเอนด์อยู่ใน Ruby on Rails เหตุการณ์แบบเรียลไทม์ถูกผลักโดย Ruby ไปยังคีย์ Redis จากนั้นเซิร์ฟเวอร์ไมโครโหนดจะดึงข้อมูลกลับมาและส่งไปยัง Socket.Io; Frontend อยู่ใน AngularJS และเชื่อมต่อโดยตรงกับเซิร์ฟเวอร์ socket.io ในโหนด ที่ฝั่งเซิร์ฟเวอร์ก่อนเรียลไทม์ฉันมีตัวควบคุม / รูปแบบการแยกทรัพยากรที่ชัดเจนโดยมีการประมวลผลที่แนบมากับแต่ละ การออกแบบ MVC แบบคลาสสิกนี้ถูกทำลายอย่างสมบูรณ์หรืออย่างน้อยก็ข้ามเมื่อฉันเริ่มผลักสิ่งต่าง ๆ ผ่านเว็บซ็อกเก็ตกับผู้ใช้ของฉัน ฉันมีตอนนี้เป็นท่อเดียวที่ทั้งหมดของ app ของฉันไหลลงข้อมูลได้มากขึ้นหรือน้อยกว่าโครงสร้าง และฉันก็พบว่ามันเครียด ส่วนหน้าความกังวลหลักคือการทำซ้ำตรรกะทางธุรกิจ เมื่อผู้ใช้โหลดหน้าฉันต้องโหลดแบบจำลอง AJAX แบบดั้งเดิมของฉันผ่านสายโทรศัพท์ แต่ฉันต้องจัดการกับข้อมูลแบบเรียลไทม์ที่ท่วมท้นและฉันก็พบว่าตัวเองซ้ำซ้อนกับตรรกะทางธุรกิจฝั่งไคลเอ็นต์ของฉันเพื่อรักษาความมั่นคงของโมเดลฝั่งไคลเอ็นต์ของฉัน หลังจากการวิจัยบางอย่างฉันไม่พบบทความบทความหนังสือหรืออะไรก็ตามที่จะให้คำแนะนำเกี่ยวกับวิธีที่เราสามารถทำได้และควรออกแบบสถาปัตยกรรมของ webapp ทันสมัยโดยมีหัวข้อเฉพาะอยู่สองสามข้อ: วิธีจัดโครงสร้างข้อมูลที่ส่งจากเซิร์ฟเวอร์ไปยังผู้ใช้ ฉันควรส่งกิจกรรมเช่น "ทรัพยากรนี้ได้รับการอัปเดตแล้วและคุณควรโหลดซ้ำผ่านการโทร AJAX" หรือกดข้อมูลที่อัปเดตแล้วแทนที่ข้อมูลก่อนหน้านี้ที่โหลดผ่านการโทร AJAX ครั้งแรก วิธีการกำหนดโครงกระดูกที่สอดคล้องกันและปรับขนาดได้กับข้อมูลที่ส่ง? …

1
RESTful HTTP และ websocket ในแอปพลิเคชันเดียวกันหรือไม่
หากแอปพลิเคชันเปิดWebSocketฟีดสดอยู่แล้วฉันควรใช้แอปพลิเคชันนั้นAJAXเพื่อการสื่อสารอื่น ๆ กับเซิร์ฟเวอร์หรือไม่ เนื่องจากการเชื่อมต่อเปิดอยู่แล้วเราควรใช้สำหรับการร้องขอที่Request/Responseไม่ใช่แบบเรียลไทม์หรือไม่ ฉันชอบRESTful HTTPคำขอมากกว่าเพราะฉันพบข้อผิดพลาดได้ง่ายกว่า คุณสามารถใช้เบราว์เซอร์ที่มี URL หรือหยิกเพื่อทดสอบว่า API ส่งคืนอะไร WebSocketคุณไม่จำเป็นต้องเขียนโค้ดเพื่อเปิด มันจะแปลกที่จะมีRESTful HTTP APIและWebSocketในการประยุกต์ใช้กันได้หรือไม่
17 rest  ajax  websockets 

2
การปิดบังจำเป็นจริงๆเมื่อส่งจากไคลเอนต์ Websocket
Websocket RFCปัจจุบันกำหนดให้ไคลเอ็นต์ websocket ปิดบังข้อมูลทั้งหมดภายในเฟรมเมื่อส่ง (แต่ไม่จำเป็นต้องใช้เซิร์ฟเวอร์) เหตุผลที่โปรโตคอลออกแบบมาเพื่อป้องกันข้อมูลเฟรมไม่ให้ถูกแก้ไขโดยบริการที่เป็นอันตรายระหว่างไคลเอนต์และเซิร์ฟเวอร์ (พร็อกซี่ ฯลฯ ) อย่างไรก็ตามคีย์การปิดบังยังคงเป็นที่รู้จักสำหรับบริการดังกล่าว (จะถูกส่งแบบต่อเฟรมที่จุดเริ่มต้นของแต่ละเฟรม) ฉันผิดที่คิดว่าบริการดังกล่าวยังคงสามารถใช้กุญแจเพื่อเปิดโปงแก้ไขและปิดบังเนื้อหาอีกครั้งก่อนที่จะผ่านเฟรมไปยังจุดถัดไปได้หรือไม่? ถ้าฉันไม่ผิดวิธีนี้จะแก้ไขช่องโหว่ที่ควรทำอย่างไร

2
REST หรือคิวข้อความในระบบที่ต่างกันหลายระดับ?
ฉันออกแบบ API REST สำหรับระบบสามชั้นเช่น: Client application-> ->Front-end API cloud serveruser's home API server (Home) Homeเป็นอุปกรณ์บ้านและควรจะรักษาเชื่อมต่อFront-endผ่าน WebSocket หรือโพลล์ยาว(นี้เป็นสถานที่แรกที่เรากำลังละเมิด REST. จะได้รับก็แย่ภายหลัง) Front-endช่องสัญญาณส่วนใหญ่Clientร้องขอการHomeเชื่อมต่อและจัดการการโทรบางตัว บางครั้งส่งการแจ้งเตือนไปยังHomeClient Front-endและHomeมี API เดียวกันโดยทั่วไป Clientอาจเชื่อมต่อHomeโดยตรงผ่าน LAN ในกรณีนี้Homeจำเป็นต้องลงทะเบียนClientการกระทำบางอย่างกับFront-endตัวเอง ข้อดีสำหรับ REST ในระบบนี้คือ: REST สามารถอ่านได้โดยมนุษย์ ส่วนที่เหลือมีการทำแผนที่กริยาที่กำหนดไว้อย่างดี (เช่น CRUD) คำนามและรหัสการตอบสนองกับวัตถุโปรโตคอล; มันทำงานผ่าน HTTP และส่งผ่านผู้รับมอบฉันทะที่เป็นไปได้ทั้งหมด; ส่วนที่เหลือ REST คือ: เราไม่เพียง แต่ต้องการสไตล์การสื่อสารที่ตอบสนองการร้องขอเท่านั้น รหัสข้อผิดพลาด HTTP อาจไม่เพียงพอสำหรับจัดการข้อผิดพลาดการสื่อสารสามระดับ Front-endอาจจะกลับ202 Acceptedไปโทร async …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.