เป็นไปได้ไหมที่จะใช้การสื่อสารสองทางระหว่างไคลเอนต์และเซิร์ฟเวอร์กับ Apache Thrift ดังนั้นไม่เพียงแต่จะสามารถสร้าง RPC จากไคลเอนต์ไปยังเซิร์ฟเวอร์ได้ แต่ยังในทางกลับกันอีกด้วย ในโปรเจ็กต์ของฉัน ฉันมีข้อกำหนดว่าเซิร์ฟเวอร์จะต้องส่งข้อมูลบางอย่างไปยังไคลเอนต์โดยที่ไคลเอนต์ไม่ได้ถามก่อนที่จะทำสิ่งนี้
ใช้ Apache Thrift สำหรับการสื่อสารสองทางหรือไม่
คำตอบ (2)
มีสองวิธีในการบรรลุเป้าหมายนี้ด้วย Thrift
หากปลายทั้งสองด้านเป็นแบบเพียร์ไม่มากก็น้อยและคุณเชื่อมต่อผ่านซ็อกเก็ตหรือไปป์ คุณเพียงแค่ตั้งค่าเซิร์ฟเวอร์และไคลเอ็นต์ที่ปลายทั้งสองข้าง เท่านี้ก็เสร็จเรียบร้อย สิ่งนี้ใช้ไม่ได้ในทุกกรณี อย่างไรก็ตาม โดยเฉพาะอย่างยิ่งกับ HTTP
หากคุณเชื่อมต่อเซิร์ฟเวอร์และไคลเอนต์ผ่าน HTTP หรือช่องทางที่คล้ายกัน มีเทคนิคที่เรียกว่า "การสำรวจแบบยาว" โดยพื้นฐานแล้วต้องการให้ไคลเอนต์โทรหาเซิร์ฟเวอร์ตามปกติ แต่การโทรจะกลับมาเฉพาะเมื่อเซิร์ฟเวอร์ต้องการส่งข้อมูลบางส่วนกลับไปยังไคลเอนต์เท่านั้น หลังจากได้รับข้อมูลแล้ว ลูกค้าจะเริ่มการโทรอีกครั้งหากเขายังคงสนใจข้อมูลเพิ่มเติม
ตามที่ Denis ชี้ให้เห็น คุณอาจต้องการพิจารณาใช้ระบบ MQ ทั้งนี้ขึ้นอยู่กับกรณีการใช้งานของคุณ โปรดทราบว่ายังคงสามารถใช้ Thrift เพื่อยกเลิก/ซีเรียลไลซ์ข้อความเข้าและออกจากคิวได้ โฟลเดอร์ contrib มีตัวอย่างบางส่วนที่แสดงวิธีใช้ Thrift กับ ZMQ, Rebus และคนอื่นๆ บ้าง
คุณควรใช้คิวเช่น ZeroMQ.