ฉันสามารถเพิ่มการมอบหมายให้กับ "ซ็อกเก็ตหลัก" หลังจากสร้างการเชื่อมต่อแล้วได้หรือไม่?

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

ตอนนี้ฉันมีกรณีการใช้งานที่เมื่อผู้ใช้เข้าร่วมช่อง (i.e. user:#{user_id}) ของตนเอง ฉันจะดึงข้อมูลบางอย่างเกี่ยวกับผู้ใช้จากฐานข้อมูล ซึ่งควรจะพร้อมใช้งานทั่วโลกสำหรับทุกช่องที่ผู้ใช้รายนี้เข้าร่วมในภายหลัง อย่างไรก็ตาม ฉันไม่สามารถหาวิธีใส่ข้อมูลเหล่านั้นลงใน socket.assigns เพื่อให้สามารถใช้ได้ทุกที่ หากฉันพยายามมอบหมายให้พวกเขา พวกเขาจะพร้อมใช้งานใน socket.assigns ของช่อง user:#{user_id} นี้เท่านั้น

มีวิธีที่จะทำหรือไม่? ฉันควรจะลองดึงข้อมูลทั้งหมดเหล่านั้นในครั้งเดียวเมื่อผู้ใช้เชื่อมต่อครั้งแรก แทนที่จะดึงข้อมูลเมื่อเข้าร่วมช่องทางผู้ใช้แต่ละรายหรือไม่


person xji    schedule 31.12.2018    source แหล่งที่มา


คำตอบ (1)


ช่องที่ต่างกันหมายถึงซ็อกเก็ตที่แตกต่างกัน

วิธีแก้ปัญหาที่ง่ายที่สุดคือการรักษาสถานะถาวร (Agent, ETS, DETS, mnesia, ...) โดยถือแผนที่ user_id => user_info และค้นหาสถานะนี้ทุกครั้งที่คุณต้องการข้อมูลนี้

person Aleksei Matiushkin    schedule 31.12.2018