Python heroku กำหนดค่า procfile gunicorn + gevent สำหรับแอปแชท socket.io | RuntimeError: คุณต้องใช้เซิร์ฟเวอร์ gevent-websocket

ฉันมีแอปแชทที่ใช้งานได้บน localhost แต่ใช้ไม่ได้กับ heroku (คำถามจากเมื่อวาน) หลังจากการหาข้อมูล ฉันคิดว่าปัญหาคือฉันจะเริ่มแอปได้อย่างไร

โปรไฟล์ปัจจุบัน:

web: gunicorn adult_main:app

ฉันต้องใช้ gevent ร่วมกับ gunicorn ด้วยวิธีนี้ฉันควรจะสามารถมีสูงสุดได้ การเชื่อมต่อ socket.io 1,000 รายการ ซึ่งเพียงพอสำหรับฉันในขณะนี้

ฉันติดตั้งและเพิ่ม gevent ใน requirements.txt แล้ว นี่คือสารสกัดจากไฟล์:

Flask-SocketIO==2.9.6
gunicorn==19.7.1
gevent==1.2.2
gevent-socketio==0.3.6
gevent-websocket==0.10.1

แต่ฉันไม่เข้าใจวิธีการเริ่มแอปอย่างถูกต้อง ในทางกลับกัน ฉันใช้เทียร์ฟรีของ heroku เพื่อทดสอบทุกอย่าง

ฉันลองใช้วิธีแก้ไขปัญหาบางอย่างซึ่งพบทางออนไลน์ แต่ฉันยังไม่เข้าใจวิธีแก้ปัญหาทั้งหมดมากนัก และยังไม่พบเอกสารประกอบเกี่ยวกับเรื่องนั้น นี่คือความพยายามบางส่วนของฉัน:

web: gunicorn -k gevent-socketio adult_main:app
web: gunicorn -k gevent adult_main:app

ฉันยังพยายามที่จะเริ่มต้นโดยไม่มี gunicorn แต่ฉันคิดว่านั่นผิดอย่างสิ้นเชิง ฉันมาถูกทางแล้วหรือนี่?

แก้ไข

ฉันจัดการให้มีความคืบหน้าด้วย:

web: gunicorn -k gevent -w 1 adult_main:app

แอปไม่ขัดข้องเมื่อเริ่มต้นตอนนี้ แต่ในเว็บคอนโซล ฉันเห็นข้อผิดพลาด:

socket.io.js:7 WebSocket connection to 'wss://my-    
project.herokuapp.com/socket.io/? 
EIO=3&transport=websocket&sid=0022c1937df648bbab836bfcb4c35' failed: Error   
during WebSocket handshake: Unexpected response code: 500

ในบันทึกของ heroku:

RuntimeError: You need to use the gevent-websocket server.

แก้ไข

แม้ว่าฉันจะเห็นข้อผิดพลาดเหล่านี้ แต่การแชทก็ใช้งานได้บน heroku แล้ว นั่นมันแปลกจริงๆ อาจเป็นไปได้ว่าตอนนี้ฉันสามารถสร้างการเชื่อมต่อได้เพียง 1 รายการ จะต้องดำเนินการต่ออย่างไร?


person Roman    schedule 27.04.2018    source แหล่งที่มา


คำตอบ (1)


ข้อผิดพลาดถูกต้อง คุณต้องใช้เว็บเซิร์ฟเวอร์ gevent-websocket ไม่ใช่เว็บเซิร์ฟเวอร์ gevent ดั้งเดิมที่มาพร้อมกับ gunicorn

ดูเหมือนว่าคุณกำลังค้นหาคำตอบอยู่ทุกที่ ฉันขอแนะนำให้คุณใช้เอกสาร Flask-SocketIO เป็นแหล่งความจริงขั้นสูงสุดในขณะที่ฉันคอยอัปเดตอยู่เสมอ

สำหรับกรณีเฉพาะนี้ ส่วน Gunicorn ของเอกสารประกอบ แสดงให้คุณเห็นว่าคุณต้องเริ่มต้นเซิร์ฟเวอร์ของคุณอย่างไร:

gunicorn -k geventwebsocket.gunicorn.workers.GeventWebSocketWorker -w 1 module:app
person Miguel    schedule 28.04.2018