System.Net.WebSockets.WebSocket

需要.NET 4.5,IIS8以上,Windows Server2008R2自带的IIS不支持,Windows8及Server2012以上自带的IIS可以

1、实现IHttpHandler用于处理webSocket请求

using System;
using System.Net.WebSockets;
using System.Threading.Tasks;
using System.Web;
using System.Web.WebSockets; namespace WebSocketTest
{
public class MyWebSocketHandler : IHttpHandler
{
/// <summary>
/// 设置实例不可以重复使用
/// </summary>
public bool IsReusable
{
get
{
return false;
}
} /// <summary>
/// 判断是否是WebSocket请求
/// 是交由handlerWebSocketAsync方法处理
/// </summary>
/// <param name="context"></param>
public void ProcessRequest(HttpContext context)
{
if (context.IsWebSocketRequest)
{
context.AcceptWebSocketRequest(handlerWebSocketAsync);
}
} private async Task handlerWebSocketAsync(AspNetWebSocketContext context)
{
WebSocket webSocket = context.WebSocket; await webSocket.SendMsgAsync("连接成功"); while (true)
{
if (webSocket.State == WebSocketState.Open)
{
string msg = await webSocket.ReceiveMsgAsync();
webSocket.SendMsgAsync(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")
+ @",Receive:" + msg);
}
}
}
}
}
webSocket.ReceiveMsgAsync 和 webSocket.SendMsgAsync 是我自己封装的两个扩展方法,用于字符串和byte[]转换
using System;
using System.Net.WebSockets;
using System.Text;
using System.Threading;
using System.Threading.Tasks; namespace WebSocketTest
{
public static class WebSocketHelper
{
/// <summary>
/// 发送消息
/// </summary>
/// <param name="webSocket"></param>
/// <param name="msg"></param>
/// <returns></returns>
public static async Task SendMsgAsync(this WebSocket webSocket, string msg)
{
byte[] bytesMsg = Encoding.UTF8.GetBytes(msg);
ArraySegment<byte> segment = new ArraySegment<byte>(bytesMsg);
await webSocket.SendAsync(segment, WebSocketMessageType.Text, true, CancellationToken.None);
} /// <summary>
/// 接收消息
/// </summary>
/// <param name="webSocket"></param>
/// <returns></returns>
public static async Task<string> ReceiveMsgAsync(this WebSocket webSocket)
{
ArraySegment<byte> receiveSegment = new ArraySegment<byte>(new byte[]);
WebSocketReceiveResult receiveResult = await webSocket.ReceiveAsync(receiveSegment, CancellationToken.None); string clientMsg = Encoding.UTF8.GetString(receiveSegment.Array, , receiveResult.Count);
return clientMsg;
}
}
}

2、在web.Config中加入自定义的handler,集成模式需要在<system.webServer>节点配置,经典模式在<system.web>节点配置

<system.web>
<compilation debug="true" targetFramework="4.6.1"/>
<httpRuntime targetFramework="4.5"/>
<!--<httpHandlers>
<add verb="*" path="*" type="WebSocketTest.MyWebSocketHandler, WebSocketTest" />
</httpHandlers>-->
</system.web>
<system.webServer>
<handlers>
<add name="webSocketHandler" verb="*" path="*" type="WebSocketTest.MyWebSocketHandler, WebSocketTest"/>
</handlers>
</system.webServer>

3、运行VS,进行测试

运行结果

WebSocket简单尝试的更多相关文章

  1. WebSocket简单介绍

    Java后端WebSocket的Tomcat实现 一.WebSocket简单介绍 随着互联网的发展,传统的HTTP协议已经很难满足Web应用日益复杂的需求了.近年来,随着HTML5的诞生,WebSoc ...

  2. HTTP协议系列(3)---包括WebSocket简单介绍

    一.HTTPS     HTTP是超文本传输协议,那HTTPS是什么尼?要明白HTTPS是什么先要明白HTTP的缺点,想一下我们在使用HTTP的时候会有那些缺点尼? 1.通信使用的明文(不加密),内容 ...

  3. 简单尝试Spring Cloud Gateway

    简单尝试Spring Cloud Gateway 简介 Spring Cloud Gateway是一个API网关,它是用于代替Zuul而出现的.Spring Cloud Gateway构建于Sprin ...

  4. websocket简单入门

    今天说起及时通信的时候,突然被问到时用推的方式,还是定时接受的方式,由于之前页面都是用传统的ajax处理,可能对ajax的定时获取根深蒂固了,所以一时之间没有相同怎么会出现推的方式呢?当被提及webs ...

  5. Java Springboot webSocket简单实现,调接口推送消息到客户端socket

    Java Springboot webSocket简单实现,调接口推送消息到客户端socket 后台一般作为webSocket服务器,前台作为client.真实场景可能是后台程序在运行时(满足一定条件 ...

  6. WebSocket简单介绍(WebSocket 实战)(3)

    这一节里我们用一个案例来演示怎么使用 WebSocket 构建一个实时的 Web 应用.这是一个简单的实时多人聊天系统,包括客户端和服务端的实现.客户端通过浏览器向聊天服务器发起请求,服务器端解析客户 ...

  7. python+selenium 简单尝试

    前言 selenium是一种自动化测试工具,简单来说浏览器会根据写好的测试脚本自动做一些操作. 关于自动化测试,一开始接触的是splinter,但是安装的时候发现它是基于selenium的,于是打算直 ...

  8. websocket++简单使用例子

    前言 html5支持使用websocket协议与服务器保持一个长连接,方便双方互相传输数据,而且服务器也能主动发送信息给客户端,而在这之前使用HTTP是很难做到的.下面介绍使用C++实现的websoc ...

  9. react-native学习笔记——简单尝试

    毫无疑问,我是个不善于写博文的人. 毫无疑问,react是个出的框架. 毫无疑问,react-native更是个牛逼的引擎. 我个人对react-native的理解就是js被js引擎编译,去调用本地语 ...

随机推荐

  1. 各种height 以及判断滚动条是否已拉到页面最底部

    DTD已声明 IEdocument.documentElement.scrollHeight  浏览器所有内容高度 ,document.body.scrollHeight  浏览器所有内容高度docu ...

  2. 《java并发编程实战》

    目录 对本书的赞誉 译者序 前 言 第1章 简介 1.1 并发简史 1.2 线程的优势 1.2.1 发挥多处理器的强大能力 1.2.2 建模的简单性 1.2.3 异步事件的简化处理 1.2.4 响应更 ...

  3. aliyun阿里云Maven仓库配置

    maven仓库用过的人都知道,国内有多么的悲催.还好有比较好用的镜像可以使用,尽快记录下来.速度提升100倍. http://maven.aliyun.com/nexus/#view-reposito ...

  4. System.Action的使用(lambda 表达式)

    对于Action的使用方法使用如下: namespace ConsoleApp1 { class Program { static void Main(string[] args) { string ...

  5. centos6.10搭建ELK之elasticsearch6.5.4

    1.环境准备 1.1.安装java环境版本不要低于java8 # java -version java version "1.8.0_191" Java(TM) SE Runtim ...

  6. Kafka的通讯协议

    Kafka的通讯协议 标签:kafka Kafka的Producer.Broker和Consumer之间采用的是一套自行设计的基于TCP层的协议.Kafka的这套协议完全是为了Kafka自身的业务需求 ...

  7. Filebeat+Kafka+Logstash+ElasticSearch+Kibana 日志采集方案

    前言 Elastic Stack 提供 Beats 和 Logstash 套件来采集任何来源.任何格式的数据.其实Beats 和 Logstash的功能差不多,都能够与 Elasticsearch 产 ...

  8. U3D Transform用法

    最近在学习unity3d,下面对Transform类做一个小结 一.常用属性和方法 1.1 常用属性: 用代码展示一下上面的一些属性,值得注意的是myCube是mySphere的父物体 using U ...

  9. DML和索引内部结构变化

    1.修改数据对索引结构的影响 合适的索引对查询性能和效率的提升是巨大的,但是万事有利有弊,拥有索引的表在增.删.改记录时需要去维护索引.如何让增.删.改更快速更高效?这就需要了解数据修改时对索引结构会 ...

  10. SPI 驱动框架

    SPI 驱动框架 1. 枚举过程 drivers/spi/spi.c: spi_register_board_info /* 对于每一个spi_master,调用spi_match_master_to ...