ในเกือบทุกตัวอย่างที่ฉันพบ Flask/Socket.io นั้น Socket.io จะทริกเกอร์เหตุการณ์ที่แอป Flask ประมวลผลแล้ว และจัดการกับการตอบสนองใดๆ ก็ตาม
ฉันต้องพุชข้อมูลใหม่ไปยังเพจอย่างสม่ำเสมอ โดยไม่ต้องมีทริกเกอร์เหตุการณ์ ในบทแนะนำออนไลน์ของ Flask/Socket.io พวกเขาพูดถึงเรื่องนี้สั้นๆ แต่ฉัน ฉันติดขัดมาก
ณ ตอนนี้ ฉันแค่พุชข้อมูลบนการเชื่อมต่อไคลเอนต์เท่านั้น โดยสร้างเธรดใหม่สำหรับทุกการเชื่อมต่อ นี่คือรหัสของฉันสำหรับสิ่งนั้น:
@socketio.on('connect', namespace='/test')
def test_connect():
# need visibility of the global thread objects
print "We're working"
global thread
print('Client connected')
if not thread.isAlive():
print "Starting Thread"
thread = RandomThread()
thread.start()
แล้ว:
class RandomThread(Thread):
def __init__(self):
self.delay = 6
super(RandomThread, self).__init__()
## Find Tweets every X amount of seconds
def tweetFinder(self):
print "Finding Tweets..."
while not thread_stop_event.isSet():
twit = Twitter()
twit.login()
cityName = twit.getUserTweets()
print cityName
socketio.emit('newnumber', {'number': cityName}, namespace='/test')
sleep(self.delay)
def run(self):
self.tweetFinder()
แต่ฉันจะทำให้เธรด/กระบวนการพุชข้อมูลเริ่มต้นทันทีเมื่อเปิดตัวแอปพลิเคชันได้อย่างไร ฉันแค่อยากให้มันทำงานอย่างต่อเนื่องและไม่มีที่สิ้นสุดในแบ็กเอนด์ โดยอัปเดตหน้าโดยไม่คำนึงถึงกิจกรรม
นี่คือสิ่งที่เอกสาร Flask/Socket-io พูด ฉันไม่สามารถหาวิธีทำให้มันทำงานอย่างที่ฉันต้องการได้
ในตัวอย่างทั้งหมดที่แสดงจนถึงจุดนี้ เซิร์ฟเวอร์ตอบสนองต่อเหตุการณ์ที่ส่งโดยไคลเอนต์ แต่สำหรับบางแอปพลิเคชัน เซิร์ฟเวอร์จะต้องเป็นผู้ริเริ่มข้อความ สิ่งนี้มีประโยชน์ในการส่งการแจ้งเตือนไปยังไคลเอนต์เกี่ยวกับเหตุการณ์ที่เกิดขึ้นในเซิร์ฟเวอร์ เช่น ในเธรดพื้นหลัง สามารถใช้เมธอด socketio.send() และ socketio.emit() เพื่อออกอากาศไปยังไคลเอนต์ที่เชื่อมต่อทั้งหมด:
def some_function():
socketio.emit('some event', {'data': 42})
โปรดทราบว่าในการใช้งานนี้ไม่มีบริบทของไคลเอนต์ ดังนั้นจึงถือว่า Broadcast=True และไม่จำเป็นต้องระบุ
socketio.run()
? - person Miguel   schedule 19.12.2014