ทุกคนสามารถแจ้งให้ฉันทราบว่า SignalR ทำงานภายในอย่างไรในระดับสูง?
ฉันเดาว่ามันกำลังล้างข้อมูลโดยใช้Response.Flush
และที่ฝั่งไคลเอ็นต์มันกำลังส่งคำขอ Ajax ในบางช่วงเวลา ถูกต้องหรือไม่
ทุกคนสามารถแจ้งให้ฉันทราบว่า SignalR ทำงานภายในอย่างไรในระดับสูง?
ฉันเดาว่ามันกำลังล้างข้อมูลโดยใช้Response.Flush
และที่ฝั่งไคลเอ็นต์มันกำลังส่งคำขอ Ajax ในบางช่วงเวลา ถูกต้องหรือไม่
คำตอบ:
ไม่ SignalR เป็นสิ่งที่เป็นนามธรรมผ่านการเชื่อมต่อ มันทำให้คุณมีสองรูปแบบการเขียนโปรแกรมผ่านการเชื่อมต่อนั้น (ฮับและการเชื่อมต่อแบบถาวร) SignalR มีแนวคิดของการขนส่งแต่ละการขนส่งตัดสินใจว่าจะส่ง / รับข้อมูลและเชื่อมต่อและตัดการเชื่อมต่ออย่างไร
SignalR มีการขนส่งในตัวไม่กี่:
SignalR พยายามเลือกการเชื่อมต่อที่ "ดีที่สุด" ที่เซิร์ฟเวอร์และไคลเอนต์สนับสนุน (คุณสามารถบังคับให้มันใช้การส่งผ่านข้อมูลเฉพาะ)
นั่นคือระดับสูง หากคุณต้องการดูว่าการขนส่งแต่ละครั้งมีการใช้งานอย่างไรคุณสามารถดูซอร์สโค้ดได้
นอกจากนี้ยังมีรหัสลูกค้าสำหรับการขนส่งแต่ละครั้ง: https://github.com/SignalR/SignalR/tree/master/src/Microsoft.AspNet.SignalR.Client.JS
หากคุณกำลังถามเกี่ยวกับการทำงานของการขนส่งแบบสำรวจนาน:
ส่งคำขอ ajax ไปยังเซิร์ฟเวอร์ที่กำลังรอสัญญาณตอบกลับแบบอะซิงโครนัส เมื่อมีสัญญาณหรือการร้องขอหมดเวลาสัญญาณจะส่งคืนจากเซิร์ฟเวอร์และส่งการร้องขออื่นและกระบวนการดำเนินการต่อ (ฉันทิ้งรายละเอียดบางอย่างเกี่ยวกับวิธีที่ลูกค้าติดตามสิ่งที่เห็นดังนั้นจึงไม่พลาดข้อความ)
หวังว่าคำตอบส่วนใหญ่ของคำถามของคุณ
@davidfowl ได้ตอบส่วนที่สำคัญแล้ว อย่างไรก็ตามเพื่อให้รายละเอียดเพิ่มเติมเกี่ยวกับความแตกต่างในพฤติกรรมของการขนส่งโดยเฉพาะระหว่าง WebSocket และการขนส่งอื่น ๆ ด้านล่างคือบางจุด