ฉันมีสถาปัตยกรรมที่เกี่ยวข้องกับเบราว์เซอร์ที่สำรวจผ่าน ajax ทุก 3 วินาทีสำหรับการอัปเดต และฉันต้องการเปลี่ยนเป็น การโพลแบบยาว
ฉันต้องการให้ลูกค้า 1, 2.. {n} รายทำการโพลแบบยาว รอการอัปเดต และมีบางอย่างเกิดขึ้นบนเซิร์ฟเวอร์เพื่อส่งสัญญาณให้ลูกค้าที่รอกลับมา ความคิดแรกของฉันคือการใช้ EventWaitHandle
และ ฉันสามารถทำสิ่งนี้ได้อย่างง่ายดายหากฉันต้องการสนับสนุนลูกค้า 1 ราย ฉันแค่มี AutoResetEvent
WaitHandle
ที่จะ WaitOne
เพื่อบล็อกไคลเอ็นต์ อาจมีการหมดเวลา หรืออาจจะไม่ ไม่ว่าจะด้วยวิธีใด AutoResetEvent
จะอนุญาตให้ฉันรองรับไคลเอนต์ได้เพียง 1 ตัวเท่านั้น (เนื่องจากมันปลุกได้เพียง 1 เธรดที่รออยู่) และฉันต้องการไคลเอนต์ n ตัว
ฉันค่อนข้างแน่ใจว่าฉันจำเป็นต้องใช้ ManualResetEvent
WaitHandle
แต่ฉันไม่แน่ใจว่าเมื่อใดจะโทร Reset
หลังจากฉัน Set
มัน (เมื่อปลุกเธรด) ฉันควร Thread.Sleep
จำนวนที่ต้องการอยู่ระหว่าง Set
และ Reset
?
ในรหัสหลอก ตรรกะการตื่นจะเป็น
- รับ
ManualResetEventWaitHandle
- โทร
Set
- ตรวจสอบให้แน่ใจว่าลูกค้าที่รออยู่ทั้งหมดได้ตื่นขึ้นแล้ว พร้อมทั้งป้องกันไม่ให้คำขอใหม่ส่งผ่าน
- โทร
Reset
ตอนนี้ลูกค้าที่รออยู่ทั้งหมดได้รับการอัปเดตแล้ว
มันเป็นบรรทัดที่ 3 ที่ฉันลำบากด้วย ขณะนี้ฉันกำลังคิดถึงแนวคิดที่จะมี LastTxID
ที่ไคลเอ็นต์ / เซิร์ฟเวอร์ดูแลรักษาและอาจใช้ตัวจัดการรอ 2 ตัว อย่างไรก็ตาม ก่อนที่ฉันจะคลั่งไคล้การติดตั้งใช้งานนี้ ฉันต้องการรับคำติชมที่นี่เพื่อดูว่าพวกเขาจะนำตรรกะการตื่นไปใช้อย่างไร
แก้ไข: สมมติว่าฉันมีปัญหาที่เกี่ยวข้องกับการมีผู้ใช้พร้อมกันสูงสุดที่คิดออก ไม่ว่าจะโดยการปรับแต่ง IIS หรือโฮสต์ผ่าน WCF หรือวิธีแก้ไขปัญหาอื่น ๆ ฉันแค่อยากจะมุ่งเน้นไปที่ตรรกะของการตื่นเท่านั้น