กองของเราคือ ลูกค้า (เบราว์เซอร์) <-> Nginx Reverse Proxy <-> เว็บเซิร์ฟเวอร์ (Flask + Gunicorn) <-> เซิร์ฟเวอร์ Golang gRPC
ปัญหาคือเมื่อลูกค้าโทรไปที่ /ข้อมูลเรียลไทม์
จุดสิ้นสุด จากนั้น Flask จะเปิดการเชื่อมต่อ gRPC และเริ่มรับข้อมูลผ่านเซิร์ฟเวอร์->ไคลเอนต์ สตรีมทิศทางเดียว จากนั้นจะส่งกลับไปยังลูกค้า เมื่อฉันเรียกใช้โดยไม่มี Nginx ฉันจะได้รับคำตอบทั้งหมด เมื่อทำงานด้วย Nginx การตอบสนองบางอย่างจะถูกตัดทอน ตัวอย่างเช่น หากเราคาดหวัง:
{
"แหล่งที่มา": "serviceA",
"การประทับเวลา": 123456789,
"ข้อมูล": {
"1": 24.55667,
"2": -456.5656,
...
"200": 5.678
}
}
เราได้รับ
{
"แหล่งที่มา": "serviceA",
"เวลา
แล้ว
แสตมป์": 123456789,
"ข้อมูล": {
"1": 24.55667,
"2": -456.5656,
...
"200": 5.678
}
}
สิ่งนี้จะถูกพิมพ์ใน console.log ฉันมี ปิด proxy_buffering;
ในการกำหนดค่า nginx มิฉะนั้นจะไม่มีข้อมูลส่งไปยังเบราว์เซอร์ ไม่แน่ใจว่าจะแก้ไขปัญหานี้อย่างไร
ที่นี่ เป็นตัวอย่างขั้นต่ำที่สามารถทำซ้ำได้
อัปเดต:
ฉันได้รันตัวอย่างขั้นต่ำที่ทำซ้ำได้ด้วย Apache2 แทนที่จะเป็น Nginx และพบการตัดทอนแบบสุ่มแบบเดียวกัน