WebSockets - เซิร์ฟเวอร์ทำงาน

เซิร์ฟเวอร์เว็บซ็อกเก็ตเป็นโปรแกรมง่ายๆซึ่งมีความสามารถในการจัดการกับเหตุการณ์และการกระทำของ Web Socket โดยปกติจะแสดงวิธีการที่คล้ายกันกับ Web Socket Client API และภาษาโปรแกรมส่วนใหญ่มีการใช้งาน แผนภาพต่อไปนี้แสดงกระบวนการสื่อสารระหว่างเซิร์ฟเวอร์ Web Socket และไคลเอ็นต์ Web Socket โดยเน้นถึงเหตุการณ์และการดำเนินการที่ทริกเกอร์

แผนภาพต่อไปนี้แสดงเซิร์ฟเวอร์ Web Socket และเหตุการณ์ไคลเอ็นต์ที่ทริกเกอร์ -

การเชื่อมต่อกับเว็บเซิร์ฟเวอร์

เซิร์ฟเวอร์เว็บซ็อกเก็ตทำงานในลักษณะเดียวกับไคลเอ็นต์ Web Socket ตอบสนองต่อเหตุการณ์และดำเนินการเมื่อจำเป็น โดยไม่คำนึงถึงภาษาโปรแกรมที่ใช้เซิร์ฟเวอร์ Web Socket ทุกตัวจะดำเนินการบางอย่าง

เริ่มต้นเป็นที่อยู่เว็บซ็อกเก็ต มันจัดการOnOpen, OnClose, และ OnMessage เหตุการณ์และส่งข้อความไปยังลูกค้าด้วย

การสร้างอินสแตนซ์เซิร์ฟเวอร์เว็บซ็อกเก็ต

เซิร์ฟเวอร์ Web Socket ทุกตัวต้องการโฮสต์และพอร์ตที่ถูกต้อง ตัวอย่างการสร้างอินสแตนซ์ Web Socket ในเซิร์ฟเวอร์มีดังนี้ -

var server = new WebSocketServer("ws://localhost:8181");

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

Fleck แสดงถึงการเชื่อมต่อขาเข้า (ไคลเอนต์) กับไฟล์ IwebSocketConnectionอินเตอร์เฟซ. เมื่อใดก็ตามที่มีคนเชื่อมต่อหรือตัดการเชื่อมต่อจากบริการของเราสามารถสร้างหรืออัปเดตรายการว่างได้

var clients = new List<IWebSocketConnection>();

หลังจากนั้นเราสามารถโทรไปที่ไฟล์ Startวิธีการและรอให้ไคลเอนต์เชื่อมต่อ หลังจากเริ่มต้นเซิร์ฟเวอร์จะสามารถยอมรับการเชื่อมต่อที่เข้ามาได้ ใน Fleck เมธอด Start ต้องการพารามิเตอร์ซึ่งระบุซ็อกเก็ตที่ยกเหตุการณ์ขึ้น -

server.Start(socket) =>
{
});

OnOpen เหตุการณ์

OnOpenเหตุการณ์กำหนดว่าลูกค้าใหม่ได้ร้องขอการเข้าถึงและดำเนินการจับมือครั้งแรก ควรเพิ่มไคลเอนต์ลงในรายการและอาจเป็นข้อมูลที่ควรจัดเก็บที่เกี่ยวข้องเช่นที่อยู่ IP Fleck ให้ข้อมูลดังกล่าวแก่เราตลอดจนตัวระบุเฉพาะสำหรับการเชื่อมต่อ

server.Start(socket) ⇒ {

   socket.OnOpen = () ⇒ {
      // Add the incoming connection to our list.
      clients.Add(socket);
   }
	
   // Handle the other events here...
});

OnClose เหตุการณ์

OnCloseเหตุการณ์จะเพิ่มขึ้นเมื่อใดก็ตามที่ไคลเอนต์ถูกตัดการเชื่อมต่อ ไคลเอ็นต์จะถูกลบออกจากรายการและแจ้งไคลเอ็นต์ที่เหลือเกี่ยวกับการตัดการเชื่อมต่อ

socket.OnClose = () ⇒ {
   // Remove the disconnected client from the list.
   clients.Remove(socket);
};

เหตุการณ์ OnMessage

OnMessageเหตุการณ์เกิดขึ้นเมื่อไคลเอนต์ส่งข้อมูลไปยังเซิร์ฟเวอร์ ภายในตัวจัดการเหตุการณ์นี้ข้อความขาเข้าสามารถส่งไปยังไคลเอนต์หรืออาจเลือกเพียงบางส่วนเท่านั้น

กระบวนการนี้ง่าย โปรดทราบว่าตัวจัดการนี้ใช้สตริงชื่อmessage เป็นพารามิเตอร์ -

socket.OnMessage = () ⇒ {
   // Display the message on the console.
   Console.WriteLine(message);
};

ส่ง () วิธีการ

Send()วิธีการเพียงแค่ส่งข้อความที่ต้องการไปยังไคลเอนต์ที่ระบุ การใช้ Send () ข้อความหรือข้อมูลไบนารีสามารถเก็บไว้ในไคลเอนต์ได้

การทำงานของ OnMessage เหตุการณ์มีดังนี้ -

socket.OnMessage = () ⇒ {
   foreach (var client in clients) {
      // Send the message to everyone!
      // Also, send the client connection's unique identifier in order
      // to recognize who is who.
      client.Send(client.ConnectionInfo.Id + " says: " + message);
   }
};