C# websocket及时通信协议的实现方法示例

2019-12-30 18:27:40王旭

传统“长轮询”实现Web端即时通讯的问题

WebSocket出现之前,Web端为了实现即时通讯,所用的技术都是Ajax轮询(polling)。轮询是在特定的的时间间隔(如每1秒),由浏览器对服务器发出HTTP request,然后由服务器返回最新的数据给客服端的浏览器。这种传统的HTTP request 的模式带来很明显的缺点 – 浏览器需要不断的向服务器发出请求,然而HTTP request 的header是非常长的,里面包含的数据可能只是一个很小的值,这样会占用很多的带宽。

而比较新的技术去做轮询的效果是Comet , 但这种技术虽然可达到全双工通信,依然需要发出请求。

WebSocket 技术概览

在 WebSocket API,浏览器和服务器只需要要做一个握手的动作,然后,浏览器和服务器之间就形成了一条快速通道。两者之间就直接可以数据互相传送,改变了原有的B/S模式。

WebSocket技术应用的典型架构:

#c67cbc1670aeb3fdd55d76e76c52be8c#

WebSocket的技术原理:

websocket通信协议,c#,websocket,示例,websocket编程

介绍了基础知识,下面开始本文的正文内容:

C# websocket及时通信协议的实现

1:Websocket有java、nodejs、python、PHP、等版本 ,我现在使用的是C3版本,服务器端是Fleck。客户端和服务器端来使用websocket的,下面开始讲解如何使用:

2:在开始之前我们先来看看哪些浏览器支持websocket:

websocket通信协议,c#,websocket,示例,websocket编程

Websocket服务器支持:

websocket通信协议,c#,websocket,示例,websocket编程

3:接下来我们使用的是C#控制台程序来实现客户端直接通信的实施推送第一步服务器端:

打开VS2015 创建项目Webshoufa(如下图)

websocket通信协议,c#,websocket,示例,websocket编程

服务器端示例展示:

打开主程序入库Program.CS

写入主要链接推送代码如下展示


FleckLog.Level = LogLevel.Debug;

 var allSockets = new List<IWebSocketConnection>();

 var server = new WebSocketServer("ws://0.0.0.0:7181");

 server.Start(socket =>

 {

 socket.OnOpen = () =>

 {

  Console.WriteLine("Open!");

  allSockets.Add(socket);

 };

 socket.OnClose = () =>

 {

  Console.WriteLine("Close!");

  allSockets.Remove(socket);

 };

 socket.OnMessage = message =>

 {

  Console.WriteLine(message);

  allSockets.ToList().ForEach(s => s.Send("Echo: " + message));

 };

 });