通過對Flect Websocket 和 SupperWebSocket 的比較,初步總結出
WebSocket 服務端的實現步驟:
- 建立WebSocket 服務,並註冊事件(Opend OnMessageReceived Closed)
- 配置 監聽地址 Fleck 的WebSocketServer(url) url="ws://0.0.0.0:10020" 而SupperWebSocket.Setup(ip,port)
- 啓動監聽 Start()
示例:(SupperWebSocket)
WebSocketServer wsServer=new WebSocketServer();
if(!wsServer.Setup(ip,port)){
//設置ip與端口失敗
}
if(!wsServer.Start())
{
啓動監聽失敗處理
}
wsServer.NewSessionConnected=(session)=>{有新的連接};
wsServer.NewSessionClosed=(session,reason)=>{有斷開連接};
wsServer.NewMessageReceived=(session,message)=>{收到新的消息}
wsServer.NewDataReceived=(session,bytes)=>{二進制消息}
wsServer.Stop()
這裏WebSocketServer對象通過SetUp方式對要監聽的IP及端口進行了設置,然後使用Start方法啓動監聽。
Setup方法有4中重載,但是我們通常用到的只有設置ip和端口。
WebSocketServer 還提供了4個事件泳衣管理與客戶端的連接、斷開和接受消息動作。NewMessageReceived 事件用於處理文本類消息,NewDataReceived 事件用於處理二進制類型的消息。
SupperWebSocket支持以控制檯、Winform、IIS以及Windows服務的形式寄宿服務。
WebSocket 既然是雙工通信,那麼就不能光等着接收來自客戶端的消息,我們也需要從服務端向客戶端推送消息。
SupperWebSocket 框架中,服務端與客戶端創建的連接對象爲WebSocketSession類型,也就是說將每一個客戶端的實例視爲一個會話,在客戶端創建連接的時候,產生這個會話,在客戶端斷開的時候銷燬這個會話,而客戶端與服務端進行消息通信的時候,也依賴這個會話進行傳遞。我們要實現服務端向客戶端的廣播,就要獲取到當前在活動的所有會話.
wsServer.GetAllSessions(); //獲取所有的會話,已斷開的會話不會出現在集合中
在獲取到會話之後,我們就可以通過會話向客戶端發送消息了
foreach(var item in wsServer.GetAllSessions()){
item.Send("消息"); //所有與服務端保持連接的會話(客戶端)都能接收到本條消息
}
同時會話對象還提供一個SendCloseHandshakeResponse()方法向客戶端發送一個強制斷開連接的指令。
WebSocketSession 對象包含了服務端和客戶端的所有信息,以及WebSocketServer對象本身,我們可以利用它做很多事情。