ใช้ Apache Thrift สำหรับการสื่อสารสองทางหรือไม่

เป็นไปได้ไหมที่จะใช้การสื่อสารสองทางระหว่างไคลเอนต์และเซิร์ฟเวอร์กับ Apache Thrift ดังนั้นไม่เพียงแต่จะสามารถสร้าง RPC จากไคลเอนต์ไปยังเซิร์ฟเวอร์ได้ แต่ยังในทางกลับกันอีกด้วย ในโปรเจ็กต์ของฉัน ฉันมีข้อกำหนดว่าเซิร์ฟเวอร์จะต้องส่งข้อมูลบางอย่างไปยังไคลเอนต์โดยที่ไคลเอนต์ไม่ได้ถามก่อนที่จะทำสิ่งนี้


person Thomas W.    schedule 26.02.2015    source แหล่งที่มา


คำตอบ (2)


มีสองวิธีในการบรรลุเป้าหมายนี้ด้วย Thrift

  1. หากปลายทั้งสองด้านเป็นแบบเพียร์ไม่มากก็น้อยและคุณเชื่อมต่อผ่านซ็อกเก็ตหรือไปป์ คุณเพียงแค่ตั้งค่าเซิร์ฟเวอร์และไคลเอ็นต์ที่ปลายทั้งสองข้าง เท่านี้ก็เสร็จเรียบร้อย สิ่งนี้ใช้ไม่ได้ในทุกกรณี อย่างไรก็ตาม โดยเฉพาะอย่างยิ่งกับ HTTP

  2. หากคุณเชื่อมต่อเซิร์ฟเวอร์และไคลเอนต์ผ่าน HTTP หรือช่องทางที่คล้ายกัน มีเทคนิคที่เรียกว่า "การสำรวจแบบยาว" โดยพื้นฐานแล้วต้องการให้ไคลเอนต์โทรหาเซิร์ฟเวอร์ตามปกติ แต่การโทรจะกลับมาเฉพาะเมื่อเซิร์ฟเวอร์ต้องการส่งข้อมูลบางส่วนกลับไปยังไคลเอนต์เท่านั้น หลังจากได้รับข้อมูลแล้ว ลูกค้าจะเริ่มการโทรอีกครั้งหากเขายังคงสนใจข้อมูลเพิ่มเติม

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

person JensG    schedule 26.02.2015

คุณควรใช้คิวเช่น ZeroMQ.

person Denis Kulagin    schedule 26.02.2015
comment
ฉันไม่แน่ใจว่าก) ตอบคำถามและข) เหมาะกับกรณีการใช้งานที่ OP ไม่ได้บอกเราอย่างละเอียดเพียงพอหรือไม่ สมมติว่าคุณสามารถตั้งค่าการเชื่อมต่อ ZMQ ได้ (ซึ่งไม่ใช่ระบบ MQ จริงด้วยซ้ำ) จะถือว่ามีบางสิ่งที่เรายังไม่รู้ - person JensG; 26.02.2015