一.引子(Foreword)

最近公司里面要做窗体和网页交互的功能。网上找了一下资料,这里做一个简单的扩充和整理,部分内容可能是摘自其他博客,这里会注明出处和原文地址供大家和自己日后查阅。

二.基础知识(Foundation)

(1). WebSocket介绍

WebSocket协议是基于TCP的一种新的网络协议。它实现了浏览器与服务器全双工(full-duplex)通信——允许服务器主动发送信息给客户端。(来自白度百科)

(2).浏览器对WebSocket的支持

浏览器

支持情况

Chrome谷歌浏览器

Chrome version 4+支持

Firefox火狐浏览器

Firefox version 5+支持

IE微软浏览器

IE version 10+支持(我们一般win7自带的是IE11)

Safari苹果浏览器

IOS 5+支持

Android Brower安卓浏览器

Android 4.5+支持

(3). WebSocket服务器支持

厂商

应用服务器

备注

IBM

WebSphere

WebSphere 8.0以上版本支持,7.X之前版本结合MQTT支持类似的HTTP长连接

甲骨文

WebLogic

WebLogic 12c 支持,11g以及10g版本通过HTTP Publish支持类似的HTTP长连接

微软

IIS

IIS 7.0+支持

Apache

Tomcat

Tomcat 7.0.5+支持

Jetty

Jetty 7.0+支持

(4). Web前端知识概要

<1>. 对象创建(调用WebSocket的构造函数)

1)函数原型:

Constructor(DOMString url,[DOMString protocols]);

2)说明:url为WebSocket服务器的地址,protocols为发起握手的协议名称,为可选择项。

<2>. 接口及函数方法(WebSocket的接口的定义)

1)函数原型:

Interface WebSocket:EventTarget{readonly attribute DOMString url;//readyState状态值Const unsigned short CONNECTING=0;Const unsigned short OPEN=1;Const unsigned short CLOSING=2;Const unsigned short CLOSED=3;readonly attribute unsigned short readyState;readonly attribute unsigned long bufferedAmount;//监听网络状态的事件监听器属性[TreatNonCallableAsNull] attribute Function? onopen;[TreatNonCallableAsNull] attribute Function? onerror;[TreatNonCallableAsNull] attribute Function? onclose;readonly attribute DOMString extensions;readonly attribute DOMString protocol;//关闭网络连接的方法void close([Clamp] optional unsigned short code,optional DOMString reason);//接受服务器消息的事件监听器函数[TreatNonCallableAsNull] attribute Function? onmessage;attribute DOMString binaryType;void send(DOMString data);void send(ArrayBuffer data);void send(Blob data);
};

2)说明:

【1】. 两个方法:

● send():向远程服务器发送数据

● cosle():关闭该WebSocket

【2】. 四个重要的事件监听器属性:

● onopen:当WebSocket建立网络连接的时候触发该事件

● onerror:当网络连接出现问题的时候触发该事件

● onclose:当WebSocket被关闭的时候触发该事件

● onmessage:当WebSocket接受到远程服务器的数据的时候触发该事件

                    注意:1. 上面的四个函数名均为小写,大小写时敏感的;
                              2. onmessage 绑定一个型为 function(event){…} 的函数这样就可以通过event.data来获得返回的数据;

【3】. readyState属性,用于返回WebSocket所处的状态:

● CONNECTING(数值0):WebSocket正在尝试与服务器建立连接

● OPEN(数值1):WebSocket与服务器已经建立连接

● CLOSING(数值2):WebSocket正在关闭与服务器的连接

● CLOSED(数值3):WebSocket已经关闭了与服务器的连接

<3>. 使用WebSocket(4步)

1) 将相关的定义函数绑定到上面4个监听事件中;

2) 调用WebSocket的构造函数,给定一个url来初始化一个WebSocket对象;

3) 通过send()方法来发送数据;

4) 在有必要的时候可以用close()来关闭监听;

(4).客户端知识概要

<1>. 梗概

我们可以通过基础的Socket通信来实现和网页的相互通信。但由于只有在.net Framework在4.5以及4.5以上的版本对WebSocket通信的数据解析才有相关的类来支持。所以解析数据写起来十分的繁琐,所以我们使用第三方的库来完成低版本.net框架中的通信。如果有时间我也会写一篇有关socket来进行通信及解析数据的文章。

接下来我看看用的软件和相关的技术知识。

<2>. .Net不同WebSocket库的比较

我这里找了一下网上的资料,如下链接,如果仅仅是要从网页发送消息到服务器,那么我这边使用Flerk。

● 英文版:WebSocket libraries comparison

● 翻译版:.NET的WebSocket开发包比较【已翻译100%】

<3>. Fleck的源码下载以及说明文档

源码可以从网上下载,这里我给出链接:源码下载

点击页面中的Clone or download ->  Download ZIP,如下

图一

说明文档就在下载的下面,是英文版的的,当然也可以看我博客中的译文:博主翻译版说明文档 (觉得不错的话转载一下哟:-》)

一.引子(Foreword)

对于怎么使用直接看说明文档,非常简单,这里博主就不多说了。(博主都写到晚上1点了T T)

三.代码(Code)

(1). Web网页端代码

<!DOCTYPE html><html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head><meta charset="utf-8" /><title>WebSocket测试</title><style>.div1{height:88px;   width:173px;border:1px solid blue;margin:auto;}h4{margin:auto;}</style><script>var webSocket = {};//创建websocktfunction CreateWebSocket() {webSocket = new WebSocket("ws://127.0.0.1:30000");webSocket.onopen = WebSokectOnOpen;webSocket.onmessage = WebSocketOnMessage;webSocket.onclose = WebSocketOnClose;};//建立连接事件function WebSokectOnOpen() {alert("已经打开连接!");webSocket.Send("WebSocketCreate Success!");};//监听事件function WebSocketOnMessage(event) {//监听来自客户端的数据alert(event.data);};function WebSocketOnClose() {//监听来自客户端的数据alert('和服务器断开连接');};//发送事件function WebSocketSendMsg() {//获取text中的值var text = document.getElementById("Text1").value;//发送到服务器webSocket.send(text);};</script>
</head>
<body οnlοad="CreateWebSocket()"><div class="div1"><h4>CSDN博客</h4><h4>By:LoveMiw</h4><input type="text" id="Text1" /><input type="button" οnclick="WebSocketSendMsg()" value="发送数据" /></div>
</body>
</html>

(2). 服务端C#代码

//上面是程序生成的using
using Fleck;namespace WebSocketTest
{class Program{static void Main(string[] args){//客户端url以及其对应的Socket对象字典IDictionary<string, IWebSocketConnection> dic_Sockets = new Dictionary<string, IWebSocketConnection>();//创建WebSocketServer server = new WebSocketServer("ws://0.0.0.0:30000");//监听所有的的地址//出错后进行重启server.RestartAfterListenError = true;//开始监听server.Start(socket =>{socket.OnOpen = () =>   //连接建立事件{//获取客户端网页的urlstring clientUrl = socket.ConnectionInfo.ClientIpAddress + ":" + socket.ConnectionInfo.ClientPort;dic_Sockets.Add(clientUrl, socket);Console.WriteLine(DateTime.Now.ToString() + "|服务器:和客户端网页:" + clientUrl + " 建立WebSock连接!");};socket.OnClose = () =>  //连接关闭事件{string clientUrl = socket.ConnectionInfo.ClientIpAddress + ":" + socket.ConnectionInfo.ClientPort;//如果存在这个客户端,那么对这个socket进行移除if (dic_Sockets.ContainsKey(clientUrl)){//注:Fleck中有释放//关闭对象连接 //if (dic_Sockets[clientUrl] != null)//{//dic_Sockets[clientUrl].Close();//}dic_Sockets.Remove(clientUrl);}Console.WriteLine(DateTime.Now.ToString() + "|服务器:和客户端网页:" + clientUrl + " 断开WebSock连接!");};socket.OnMessage = message =>  //接受客户端网页消息事件{string clientUrl = socket.ConnectionInfo.ClientIpAddress + ":" + socket.ConnectionInfo.ClientPort;Console.WriteLine(DateTime.Now.ToString() + "|服务器:【收到】来客户端网页:" + clientUrl + "的信息:\n" + message);};});Console.ReadKey();foreach (var item in dic_Sockets.Values){if (item.IsAvailable == true){item.Send("服务器消息:" + DateTime.Now.ToString());}}Console.ReadKey();//关闭与客户端的所有的连接foreach (var item in dic_Sockets.Values){if (item != null){item.Close();}}Console.ReadKey();}}
}

四. 结束语(Ending)

(1). 在Fleck上面下载的源码在放到工程中的时候似乎会报错,只要重新把所有的.cs按它原来的结构添加到一个新的工程中在编译就可以通过;

(2). 本文主要是用作记录成长历程的,还有这个WebSocket实践性比较强,所以还是要自己动手去试试。所以博客主由于在时间精力不是很的情况下就不去过多的强调代码了。如果真的需要可以下载我上面代码的原工程。最后我把Fleck的包也给一下吧。

工程源代码(环境vs2015)

Fleck源代码

(3).如果本文给您有什么作用的话,转发一下或给一个赞都是给我极大的支持。我排版包括那个头上的图片,都花了很多的经历去制作和整理出来的。如果要转载本文,请注明出处。晚安。2018年5月9日,凌晨。

one love for coding

C#工作总结(一):Fleck的WebSocket使用相关推荐

  1. fleck 客户端_C# Fleck的WebSocket使用

    (1). Web网页端代码 WebSocket测试 .div1 { height:88px; width:173px; border:1px solid blue; margin:auto; } h4 ...

  2. fleck 客户端_C#中使用Fleck实现WebSocket通信简例

    Fleck是一个开源的使用C#封装的WebSocket服务端工具库. 一.服务端搭建 这里选择在.net core 2.1框架下新建了一个控制台程序 在项目里使用NuGet引入Fleck包 NuGet ...

  3. C# Fleck实现websocket

    1,nuget引入包Fleck,支持framework.core,相同代码 2,直接上代码 public static class WebSocketConfig{//客户端url以及其对应的Sock ...

  4. SpringCloud工作笔记060---SpringBoot中使用WebSocket实现即时通讯_实现呼叫中心业务封装

    JAVA技术交流QQ群:170933152 ---------------我们主要用这个来转接,呼叫中心发过来的分机电话 呼叫中心:呼叫过程,首先呼叫中心运营商给个,api手册,api会规定,首先登陆 ...

  5. fleck 客户端_关于C#使用Fleck 的websocket问题

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 先上代码: FleckLog.Level = LogLevel.Debug; allSockets = new List(); Newsocket = n ...

  6. c#--Fleck WebSocket使用 (C#版Websocket实例)

    推荐几篇文章: WebSocket 实战 C#版Websocket实例 C#工作总结(一):Fleck的WebSocket使用 1.服务端代码 using Fleck; using System; u ...

  7. C# WebSocket(Fleck) 客户端:html Winfrom

    目录 一.简介 二.服务端 1.新建项目 2.WebSocketHelper 3.Program 三.客户端 1.html 2.Winform 结束 一.简介 WebSocket 是一种在单个TCP连 ...

  8. JavaScript是如何工作的:编写自己的Web开发框架 + React及其虚拟DOM原理

    摘要: 深入JS系列19. 原文:JavaScript是如何工作的:编写自己的Web开发框架 + React及其虚拟DOM原理 作者:前端小智 Fundebug经授权转载,版权归原作者所有. 这是专门 ...

  9. js 数组 实现 完全树_JavaScript的工作原理:解析、抽象语法树(AST)+ 提升编译速度5个技巧

    摘要: JS的"编译原理". 原文:JavaScript的工作原理:解析.抽象语法树(AST)+ 提升编译速度5个技巧 作者:前端小智 Fundebug经授权转载,版权归原作者所有 ...

最新文章

  1. c语言课程设计的摘要,投票程序设计-C语言课程设计摘要.doc
  2. Netty结合Protostuff传输对象案例,单机压测秒级接收35万个对象
  3. 静态Web服务器-返回固定页面数据
  4. javaaop模式供其他项目调用_Java 分布式架构的 开源的支付项目 调试实战
  5. Basic各编码每个字符占用字节个数
  6. 「PowerBI」分析服务多维数据结构重回关系数据库的一大绝招
  7. 世界上迄今为止最安全的加密算法
  8. linux php 守护进程,PHP程序员玩转Linux系列 使用supervisor实现守护进程
  9. mysql默认时间怎么不同步_MYSQL 更新时间自动同步与创建时间默认值共存问题
  10. SpringCloud - Gateway 的使用
  11. python 面试相关
  12. 浅谈协方差矩阵 再谈协方差矩阵之主成分分析
  13. getent passwd 不能访问到 ldap 的用户
  14. sql2008服务器运行哪个,SQL SERVER 2008R2 暂用服务器内存直到服务器死机。
  15. 使用树莓派开启HomeKit智能家居系统 篇一:树莓派系统安装与配置
  16. 如何用公式编辑器编辑直角三角形符号
  17. 索尼笔记本E系列,关闭触摸板
  18. docker进入容器中的方法
  19. 常见的专用服务器有哪几种呢
  20. GF(Go Frame)开发框架

热门文章

  1. 电脑插上耳机没声音 解决方法
  2. 一个很傻瓜式解数独算法
  3. 汉诺塔python创新设计_递归经典案例汉诺塔 python实现
  4. 呆萝卜与每日优鲜竞品分析
  5. 微信公众号二次开发实现自动回复文字,图片,图文功能
  6. 互联网日报 | 瑞幸咖啡股票6月29日停牌;B站举办十一周年演讲;Airbnb辟谣破产传闻...
  7. 中秋佳节之际祝各位网友身体健康,心情愉快!
  8. Gephi报错cannot load even default layout, using internally predefined configuration解决方法
  9. JavaWeb前端: JavaScript 简介
  10. Oracle 服务器 客户端 US7ASCII、 UTF8字符编码问题