通过对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对象本身,我们可以利用它做很多事情。