ฉันได้ค้นหาและอ่านบน SignalR เมื่อเร็ว ๆ นี้และในขณะที่ฉันเห็นคำอธิบายมากมายว่าอะไรคือความแตกต่างระหว่างฮับและการเชื่อมต่อแบบถาวรฉันไม่สามารถมุ่งหน้าไปอีกระดับได้ซึ่งเป็นสาเหตุที่ฉันจะ เลือกวิธีใดวิธีหนึ่งเหนืออีก?
ฉันได้ค้นหาและอ่านบน SignalR เมื่อเร็ว ๆ นี้และในขณะที่ฉันเห็นคำอธิบายมากมายว่าอะไรคือความแตกต่างระหว่างฮับและการเชื่อมต่อแบบถาวรฉันไม่สามารถมุ่งหน้าไปอีกระดับได้ซึ่งเป็นสาเหตุที่ฉันจะ เลือกวิธีใดวิธีหนึ่งเหนืออีก?
คำตอบ:
จากสิ่งที่ฉันเห็นในส่วนการเชื่อมต่อและฮับดูเหมือนว่าฮับจะให้ระบบหัวข้อซ้อนทับการเชื่อมต่อแบบถาวรระดับล่าง
จากความคิดเห็นที่ได้รับการโหวตอย่างสูงด้านล่าง:
ถูกต้องบางส่วน คุณสามารถรับหัวข้อหรือกลุ่มในการเชื่อมต่อแบบถาวรเช่นกัน ความแตกต่างใหญ่คือการกระจายข้อความประเภทต่างๆ ตัวอย่างเช่นคุณมีข้อความประเภทต่างๆและคุณต้องการส่ง payload ประเภทต่างๆ ด้วยการเชื่อมต่อแบบถาวรคุณจะต้องฝังชนิดของข้อความใน payload (ดูตัวอย่าง Raw) แต่ฮับจะช่วยให้คุณสามารถทำ RPC ผ่านการเชื่อมต่อ (ให้คุณเรียกวิธีการบนไคลเอนต์จากเซิร์ฟเวอร์และจากเซิร์ฟเวอร์ไปยังไคลเอนต์) . อีกสิ่งที่ยิ่งใหญ่คือการผูกแบบ ฮับอนุญาตให้คุณส่งพารามิเตอร์ที่พิมพ์อย่างรุนแรงไปยังเมธอด
ตัวอย่างที่ใช้ในเอกสารประกอบใช้การเปรียบเทียบห้องแชทซึ่งผู้ใช้สามารถเข้าร่วมห้องเฉพาะแล้วได้รับข้อความจากผู้ใช้รายอื่นในห้องเดียวกันเท่านั้น โดยทั่วไปรหัสของคุณสมัครสมาชิกหัวข้อแล้วได้รับเพียงข้อความที่เผยแพร่ในหัวข้อนั้น ด้วยการเชื่อมต่อแบบถาวรคุณจะได้รับข้อความทั้งหมด
คุณสามารถสร้างระบบหัวข้อของคุณเองได้อย่างง่ายดายที่ด้านบนของการเชื่อมต่อแบบถาวร แต่ในกรณีนี้ทีม SignalR ทำงานให้คุณแล้ว
ความแตกต่างที่สำคัญคือคุณไม่สามารถทำ RPC ด้วย PersistentConnection คุณสามารถส่งข้อมูลดิบได้เท่านั้น ดังนั้นแทนที่จะส่งข้อความจากเซิร์ฟเวอร์เช่นนี้
Clients.All.addNewMessageToPage(name, message);
คุณจะต้องส่งวัตถุที่มีConnection.Broadcast()
หรือConnection.Send()
จากนั้นลูกค้าจะต้องตัดสินใจว่าจะทำอย่างไรกับสิ่งนั้น ตัวอย่างเช่นคุณสามารถส่งวัตถุแบบนี้:
Connection.Broadcast(new {
method: "addNewMessageToPage",
name: "Albert",
message: "Hello"
});
และบนไคลเอนต์แทนที่จะกำหนดเพียง
yourHub.client.addNewMessageToPage = function(name, message) {
// things and stuff
};
คุณจะต้องเพิ่มการโทรกลับเพื่อจัดการข้อความที่เข้ามาทั้งหมด:
function addNewMessageToPage(name, message) {
// things and stuff
}
connection.received(function (data) {
var method = data.method;
window[method](data.name, data.message);
});
คุณจะต้องทำแบบเดียวกันกับการแจกจ่ายทางฝั่งเซิร์ฟเวอร์ใน OnReceived
วิธีการ นอกจากนี้คุณยังจะต้องทำการ deserialize สายข้อมูลที่นั่นแทนที่จะได้รับวัตถุที่พิมพ์อย่างยิ่งเช่นเดียวกับวิธีการฮับ
มีหลายเหตุผลในการเลือก PersistentConnection บนฮับ เหตุผลหนึ่งที่ฉันรู้ว่าเป็นไปได้ที่จะส่ง JSON ที่กำหนดล่วงหน้าผ่าน PersistentConnection ซึ่งคุณไม่สามารถใช้ฮับได้ ในบางสถานการณ์สิ่งนี้อาจเป็นประโยชน์ด้านประสิทธิภาพที่เกี่ยวข้อง
นอกเหนือจากนั้นดูใบเสนอราคานี้จากเอกสารประกอบ :
การเลือกรูปแบบการสื่อสาร
แอปพลิเคชันส่วนใหญ่ควรใช้ฮับ API Connections API สามารถใช้ได้ในสถานการณ์ต่อไปนี้:
รูปแบบของข้อความจริงที่ส่งจะต้องระบุ
ผู้พัฒนาต้องการทำงานกับโมเดลการส่งข้อความและการส่งแทนที่จะเป็นโมเดลการเรียกรีโมต
- แอปพลิเคชันที่มีอยู่ที่ใช้โมเดลการส่งข้อความกำลังได้รับการพอร์ตเพื่อใช้ SignalR
ทั้งนี้ขึ้นอยู่กับโครงสร้างข้อความของคุณคุณอาจได้รับผลประโยชน์เล็ก ๆ น้อย ๆ จากการใช้ PersistentConnection
คุณอาจต้องการดูตัวอย่าง SignalR โดยเฉพาะที่นี่
มีสองวิธีในการใช้ SignalR: คุณสามารถเข้าถึงได้ในระดับต่ำโดยการเอาชนะPersistentConnection
คลาสของมันซึ่งทำให้คุณสามารถควบคุมมันได้มาก หรือคุณสามารถปล่อยให้ SignalR ยกของหนักทั้งหมดให้คุณโดยใช้ 'ฮับ' ระดับสูง
การเชื่อมต่อแบบต่อเนื่องเป็น API ระดับต่ำกว่าคุณสามารถดำเนินการในเวลาที่เฉพาะเจาะจงมากขึ้นเมื่อเปิดหรือปิดการเชื่อมต่อในแอพพลิเคชั่นส่วนใหญ่ Hub เป็นตัวเลือกที่ดีที่สุด
มีสามประเด็นหลักที่ควรพิจารณาเมื่อเปรียบเทียบสองสิ่งนี้:
ด้วยการจัดรูปแบบข้อความฮับนั้นโดยทั่วไปแล้วจะมีการจัดการจากคุณ แต่ด้วยการเชื่อมต่อแบบต่อเนื่องข้อความจะเป็นข้อมูลดิบและมีการทำโทเค็นและแยกวิเคราะห์ไปมา หากขนาดข้อความมีความสำคัญดังนั้นโปรดทราบว่าน้ำหนักบรรทุกของการเชื่อมต่อแบบถาวรจะน้อยกว่าขนาดของฮับ
เมื่อพูดถึงรูปแบบการสื่อสารการเชื่อมต่อแบบต่อเนื่องโดยทั่วไปจะมีฟังก์ชั่นสำหรับการส่งและรับข้อความขณะที่ฮับใช้การเรียกขั้นตอนระยะไกลโมเดลการแบบพร้อมกับฟังก์ชันเฉพาะตามความต้องการ
เมื่อพูดถึงการปรับแต่งเนื่องจากการเชื่อมต่อแบบต่อเนื่องอยู่ในระดับต่ำกว่าพวกเขาอาจให้คุณควบคุมการปรับแต่งได้มากขึ้น