WebSocket简单尝试
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简单尝试的更多相关文章
- WebSocket简单介绍
Java后端WebSocket的Tomcat实现 一.WebSocket简单介绍 随着互联网的发展,传统的HTTP协议已经很难满足Web应用日益复杂的需求了.近年来,随着HTML5的诞生,WebSoc ...
- HTTP协议系列(3)---包括WebSocket简单介绍
一.HTTPS HTTP是超文本传输协议,那HTTPS是什么尼?要明白HTTPS是什么先要明白HTTP的缺点,想一下我们在使用HTTP的时候会有那些缺点尼? 1.通信使用的明文(不加密),内容 ...
- 简单尝试Spring Cloud Gateway
简单尝试Spring Cloud Gateway 简介 Spring Cloud Gateway是一个API网关,它是用于代替Zuul而出现的.Spring Cloud Gateway构建于Sprin ...
- websocket简单入门
今天说起及时通信的时候,突然被问到时用推的方式,还是定时接受的方式,由于之前页面都是用传统的ajax处理,可能对ajax的定时获取根深蒂固了,所以一时之间没有相同怎么会出现推的方式呢?当被提及webs ...
- Java Springboot webSocket简单实现,调接口推送消息到客户端socket
Java Springboot webSocket简单实现,调接口推送消息到客户端socket 后台一般作为webSocket服务器,前台作为client.真实场景可能是后台程序在运行时(满足一定条件 ...
- WebSocket简单介绍(WebSocket 实战)(3)
这一节里我们用一个案例来演示怎么使用 WebSocket 构建一个实时的 Web 应用.这是一个简单的实时多人聊天系统,包括客户端和服务端的实现.客户端通过浏览器向聊天服务器发起请求,服务器端解析客户 ...
- python+selenium 简单尝试
前言 selenium是一种自动化测试工具,简单来说浏览器会根据写好的测试脚本自动做一些操作. 关于自动化测试,一开始接触的是splinter,但是安装的时候发现它是基于selenium的,于是打算直 ...
- websocket++简单使用例子
前言 html5支持使用websocket协议与服务器保持一个长连接,方便双方互相传输数据,而且服务器也能主动发送信息给客户端,而在这之前使用HTTP是很难做到的.下面介绍使用C++实现的websoc ...
- react-native学习笔记——简单尝试
毫无疑问,我是个不善于写博文的人. 毫无疑问,react是个出的框架. 毫无疑问,react-native更是个牛逼的引擎. 我个人对react-native的理解就是js被js引擎编译,去调用本地语 ...
随机推荐
- 各种height 以及判断滚动条是否已拉到页面最底部
DTD已声明 IEdocument.documentElement.scrollHeight 浏览器所有内容高度 ,document.body.scrollHeight 浏览器所有内容高度docu ...
- 《java并发编程实战》
目录 对本书的赞誉 译者序 前 言 第1章 简介 1.1 并发简史 1.2 线程的优势 1.2.1 发挥多处理器的强大能力 1.2.2 建模的简单性 1.2.3 异步事件的简化处理 1.2.4 响应更 ...
- aliyun阿里云Maven仓库配置
maven仓库用过的人都知道,国内有多么的悲催.还好有比较好用的镜像可以使用,尽快记录下来.速度提升100倍. http://maven.aliyun.com/nexus/#view-reposito ...
- System.Action的使用(lambda 表达式)
对于Action的使用方法使用如下: namespace ConsoleApp1 { class Program { static void Main(string[] args) { string ...
- centos6.10搭建ELK之elasticsearch6.5.4
1.环境准备 1.1.安装java环境版本不要低于java8 # java -version java version "1.8.0_191" Java(TM) SE Runtim ...
- Kafka的通讯协议
Kafka的通讯协议 标签:kafka Kafka的Producer.Broker和Consumer之间采用的是一套自行设计的基于TCP层的协议.Kafka的这套协议完全是为了Kafka自身的业务需求 ...
- Filebeat+Kafka+Logstash+ElasticSearch+Kibana 日志采集方案
前言 Elastic Stack 提供 Beats 和 Logstash 套件来采集任何来源.任何格式的数据.其实Beats 和 Logstash的功能差不多,都能够与 Elasticsearch 产 ...
- U3D Transform用法
最近在学习unity3d,下面对Transform类做一个小结 一.常用属性和方法 1.1 常用属性: 用代码展示一下上面的一些属性,值得注意的是myCube是mySphere的父物体 using U ...
- DML和索引内部结构变化
1.修改数据对索引结构的影响 合适的索引对查询性能和效率的提升是巨大的,但是万事有利有弊,拥有索引的表在增.删.改记录时需要去维护索引.如何让增.删.改更快速更高效?这就需要了解数据修改时对索引结构会 ...
- SPI 驱动框架
SPI 驱动框架 1. 枚举过程 drivers/spi/spi.c: spi_register_board_info /* 对于每一个spi_master,调用spi_match_master_to ...