เกริ่นนำ
ก่อนหน้านี้ผมมีปัญหา node-redis ปล่อยไว้นานๆ แล้ว connection close
ทีนี้ตอนแรก ผมก็แก้ด้วยการ client.connected ให้ทำการ createClient ใหม่
แต่ปัญหาคือบางทีมัน createClient ช้า ทำให้โปรแกรมพัง
วิธีแก้
ถ้าต่อใหม่มันช้า ก็ไม่ต้องปิดสิ!!! สิ่งนั้นเรียก heartbeat (ผมเอา keyword นี้มาจาก rabbitMQ)
ผมใช้ keyword นี้ ในการหา lib แล้วก็เจอ redis-pulse
เค้าบอกว่า simple redis heartbeat with “ping”
ซึ่ง ping ก็คือคำสั่งพื้นฐาน redis ping (ทำไมตรูคิดไม่ถึงฟร่ะ – -)
เอา code ของ lib มาให้ดู มัน simple จริงๆ
คือ บรรทัดที่ 20,21 จะเป็น event ที่บอกว่า ถ้า ready หรือ end ให้เรียก function check ด้วยนะ
event ready คือ event ที่เกิดขึ้นครั้งเดียวตอนสร้าง connection สำเร็จ
event end คือ event ที่เกิดขึ้นตอน connection close
การที่เค้าดัก event end น่าจะเพราะเพื่อกรณี close แบบผิดปกติ เช่น network มีปัญหา
ต่อๆ
check บรรทัดที่ 14,15 ถ้า client.connected = true คือ connection ยังอยู่ มันก็จะทำการ ping + delay
แต่ถ้า client.connected = false มันจะเข้าเคส event end ก็แปลกใจว่าทำไมถึงไม่เรียก createClient หรือ ping แทน
client.ping(); ก็ตามนั้นเลยยยยย ping 1 ที
วนลูปไปเรื่อยเป็น heartbeat…..