asp.net中应用websocket

1.连续找了几天解决ajax轮询在用户量多的时候卡死浏览器的方案,comet、SignalR等等。都没有得到满意的解决,最后还是用了websocket临时解决了

2.解决方案,还是需要用到.net framework 4.5版本下  IHttphandler

 1   public void ProcessRequest(HttpContext context)
 2         {
 3             if (context.IsWebSocketRequest)
 4             {
 5                 context.AcceptWebSocketRequest(DoRespond);
 6             }
 7         }
 8 private async Task DoRespond(AspNetWebSocketContext context)
 9         {
10             System.Net.WebSockets.WebSocket socket = context.WebSocket;
11             while (true)
12             {
13                 ArraySegment<byte> buffer = new ArraySegment<byte>(new byte[1024]);
14                 WebSocketReceiveResult result = await socket.ReceiveAsync(buffer, CancellationToken.None);
15                 if (socket.State == WebSocketState.Open)
16                 {
17                     string userMessage = Encoding.UTF8.GetString(buffer.Array, 0, result.Count);
18                     userMessage = "测试消息 : " + userMessage ;
19                     buffer = new ArraySegment<byte>(Encoding.UTF8.GetBytes(userMessage));
20                     await socket.SendAsync(buffer, WebSocketMessageType.Text, true, CancellationToken.None);
21                 }
22                 else
23                 {
24                     break;
25                 }
26             }
27         }

3.界面端,就可以用手动调用,或者结合一个js计时器 即可实现,服务端不断推送消息过来,打开Chrome调试  并不会看到有向后台发起的请求。测试相同用户数量后,比以前的ajax轮询 的效率高了很多。   还需研究 用更简便、科学的方式解决

 1   var socket;
 2
 3         $(document).ready(function () {
 4             if (!Modernizr.websockets)
 5             {
 6                 alert("This browser does not support web sockets");
 7             }
 8
 9             socket = new WebSocket("ws://localhost:49464/WebSocketHandler.ashx");
10
11             socket.addEventListener("open", function (evt) {
12                 $("#divHistory").append(‘<h3>Connection Opened with the server.</h3>‘);
13             }, false);
14
15             socket.addEventListener("close", function (evt) {
16                 $("#divHistory").append(‘<h3>Connection was closed. :‘ + evt.reason + ‘</h3>‘);
17             }, false);
18
19             socket.addEventListener("message", function (evt) {
20                 $("#divHistory").append(‘<h3>‘ + evt.data + ‘</h3>‘);
21             }, false);
22
23             socket.addEventListener("error", function (evt) {
24                 alert(‘Error : ‘ + evt.message);
25             }, false);
26             var rtimer;
27             function loadRiskWindow() {
28                 //rtimer = window.setInterval("LoadMyFundsWork()", 3000);
29             } 

时间: 2024-12-19 01:48:04

asp.net中应用websocket的相关文章

Asp.net core中的websocket

Websocket是html5后的产物,对于asp.net core中也得到了支持,首先在NuGet中添加Microsoft.AspNetCore.WebSockets的引用(现在是1.0.1版本,2017年3月7日发布的). 首先在Configure中添加中间件 //添加websocket中间件 app.UseWebSockets(); 接下来就要定义自己处理websocket的中间件了,代码如下: using Microsoft.AspNetCore.Http; using System;

ASP.NET Core 中的 WebSocket 支持(转自MSDN)

本文介绍 ASP.NET Core 中 WebSocket 的入门方法. WebSocket (RFC 6455) 是一个协议,支持通过 TCP 连接建立持久的双向信道. 它用于从快速实时通信中获益的应用,如聊天.仪表板和游戏应用. 如果不明白什么是WebSocket可以参考这篇文章 系统必备 ASP.NET Core 1.1 或更高版本 支持 ASP.NET Core 的任何操作系统: Windows 7/Windows Server 2008 或更高版本 Linux macOS 如果应用在安

asp.ne中使用ajax和controller进行通信问题记录

为了页面显示和后端处理分离,使用了html+ajax+mvc的形式进行处理. 在这其中遇到的问题记录: 1. 在使用ajax向controller请求数据的时候,"get"方法会缓存上一次的请求,导致controller方法不能被debug跟踪到,开始以为是vs出错了,到后来才搞清楚. 解决方法:请求controller路径时加上随机数,或者使用"post"方法. 2. 在使用"POST"方法时,IE11要小心处理,因为ie会出现怎么都执行不了的

ASP.NET中的几种分页

1.通过DataGrid控件实现分页 ASP.NET中的DataGrid控件自带了分页功能,当绑定了DataGrid的数据源之后,须要对DataGrid控件进行一些设置: 左击控件右上角的小箭头→属性生成器: 选择左边的[分页]选项卡 选中[同意分页].[页大小]表示一页显示多少条数据:导航button的[位置]有顶.底.上下型三种选择.[模式]有页码和"上一页.下一页button".假设选择了页码模式.[数值button]表示最多显示的button数量,假设选择了还有一种模式,&qu

asp.net中session的原理及应用

Session简介丶特性 1.Session是一种Web会话中的常用状态之一. 2.Session提供了一种把信息保存在服务器内存中的方式.他能储存任何数据类型,包含自定义对象. 3.每个客户端的Seesion是独立存储的. 4.在整个会话过程中,只要SessionID的cookie不丢失,都会保存Session信息的. 5.Session不能跨进程访问,只能由该会话的用户访问.应为提取Session数据的id标识是以Cookie的方式保存到访问者浏览器的缓存里的. 6.当会话终止,或过期时,服

asp.net中javascript与后台c#交互

asp.net中javascript与后台c#交互 作者:熊猫大叔 字体:[增加 减小] 类型:转载 时间:2015-10-23我要评论,出处:http://www.jb51.net/article/73793.htm 这篇文章主要介绍了asp.net中javascript与后台c#交互,需要的朋友可以参考下 最近做一个小项目,网页中嵌入google maps,输入经纬度坐标可以定位地图位置并加注标记,点击标记获取远端摄像头数据并在视频窗口实现播放.在实际操作过程中,由于经纬度数据和视频登录的用

ASP.NET中Session的sessionState 4种mode模式

1. sessionState的4种mode模式 在ASP.NET中Session的sessionState的4中mode模式:Off.InProc.StateServer及SqlServer. 2. Off模式 <sessionState mode="Off"></sessionState> 关闭模式,即不需要使用Session. 单个页面关闭Session: <%@ Page EnableSessionState="false" %

ASP.NET中常用的优化性能的方法

1. 数据库访问性能优化  数据库的连接和关闭 访问数据库资源需要创建连接.打开连接和关闭连接几个操作.这些过程需要多次与数据库交换信息以通过身份验证,比较耗费服务器资源.ASP.NET中提供了连接池(Connection Pool)改善打开和关闭数据库对性能的影响.系统将用户的数据库连接放在连接池中,需要时取出,关闭时收回连接,等待下一次的连接请求. 连接池的大小是有限的,如果在连接池达到最大限度后仍要求创建连接,必然大大影响性能.因此,在建立数据库连接后只有在真正需要操作时才打开连接,使用完

ASP.NET中的&lt;%%&gt;介绍

一.主要用于ASP.NET前台绑定用的最多: <%#Eval("")%> <%#Bind("")%> <%=变量%> 1.<%#Eval("数据列")%>主要用于需要进行更改的数据列 如:需要将<%Eval("性别")%>=1:将1转换成女. 首先在.CS文件中定义一个方法: 1 public object ChangeSex(object obj) 2 { 3 if