- WebSocket 教程
- WebSocket – 首頁
- WebSocket 簡介
- WebSocket – 概述
- WebSocket - 雙向通訊
- WebSocket – 功能
- WebSocket – 實現
- WebSocket 角色
- WebSocket – 事件和操作
- WebSocket – 建立連線
- WebSocket – 處理錯誤
- WebSocket - 傳送和接收訊息
- WebSocket – 關閉連線
- JavaScript & WebSocket API
- WebSocket - 伺服器工作原理
- WebSocket - API
- WebSocket – JavaScript 應用
- WebSocket 實現
- 與伺服器通訊
- WebSocket – 安全性
- WebSocket – 移動APP
- WebSocket 有用資源
- WebSocket – 快速指南
- WebSocket – 有用資源
- WebSocket – 討論
WebSocket - 伺服器工作原理
WebSocket 伺服器是一個簡單的程式,能夠處理 WebSocket 事件和操作。它通常提供與 WebSocket 客戶端 API 相似的使用方法,大多數程式語言都提供了實現。下圖說明了 WebSocket 伺服器和 WebSocket 客戶端之間的通訊過程,重點突出了觸發的事件和操作。
下圖顯示了 WebSocket 伺服器和客戶端事件觸發:
連線到 Web 伺服器
WebSocket 伺服器的工作方式與 WebSocket 客戶端類似。它響應事件並在必要時執行操作。無論使用哪種程式語言,每個 WebSocket 伺服器都會執行一些特定操作。
它被初始化到一個 WebSocket 地址。它處理 **OnOpen、OnClose** 和 **OnMessage** 事件,並向客戶端傳送訊息。
建立 WebSocket 伺服器例項
每個 WebSocket 伺服器都需要一個有效的主機和埠。以下是一個在伺服器中建立 WebSocket 例項的示例:
var server = new WebSocketServer("ws://: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()** 方法簡單地將所需訊息傳輸到指定的客戶端。使用 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);
}
};