为什么用WebSocket?
项目之前用的Http协议,用Timer轮询请求非常消耗性能,每次查询全量数据,也非常浪费流量;
为什么不用C# 自带的WebSocket. 因为需要支持Win7 终端的用户:
DotNet的WebSocket依赖于底层的http.sys。因此需要操作系统Win8或以上的支持 。
如果你要在Win7等系统上用,则要自己用Socket做,或者用第三方的类库。
步骤如下:
a). 构造
构造一个WebSocket需要以下几步。
第1步:
需要声明命名空间
using WebSocketSharp;
第2步:
使用构造函数创建一个WebSocket实例,在参数中填入需要连接Web服务器的host。
var ws = new WebSocket ("ws://example.com")
当然,因为WebSocket实现了System.IDisposable接口,所以可以使用using语义:
using (var ws = new WebSocket ("ws://example.com")) {
...
}
当程序执行完using代码块后,WebSocket会自动关闭,并返回状态码1001(离开状态)。
b). 事件注册
接下来就是注册事件了,WebSocket提供了四个事件注册,即:开启(OnOpen),消息达到(OnMessage),出错(OnError),关闭(OnClose)。
当WebSocket与web服务器连接完成之后,就会触发OnOpen事件。注册OnOpen事件如下:
ws.OnOpen += (sender, e) => {
...
};
消息到达的事件如下:
ws.OnMessage += (sender, e) => {
...
};
- 1
- 2
- 3
可以通过e.Data(返回string的text消息数据)或e.RawData得到(返回byte[]的二进制消息数据)。
当WebSocket出错了,将会触发OnError事件:
ws.OnError += (sender, e) => {
...
};
可以通过e.Message获得错误信息。
当WebSocket关闭时,会触发OnClose事件:
ws.OnClose += (sender, e) => {
...
};
如果想要获取WebSocket退出的原因,可以通过e.Code(unsigned short 状态码)或是e.Reason(string text类型原因)获得。
c). 连接,发送数据及关闭
在新建一个webSocket实例,并注册一系列事件后,可以使用
ws.Connect ();
同步连接Web服务器。也可以通过
ws.ConnectAsync ()
进行异步连接。
在建立连接之后,可以通过
ws.Send()
发送数据。
当想要断开WebSocket时候,可以使用
WebSocket.Close (ushort code, string reason);
并可以传入状态码或原因。
----这个不能截图。