SignalR的简单实现
1创建mvc的空项目
2添加文件夹Counters放在里面的类用于封装性能计数器
3创建PerfCounterWrapper类用于封装性能计数器的实体
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Web; namespace SignalR.Counters
{
public class PerfCounterWrapper
{
public PerfCounterWrapper(string name, string category, string counter, string instance = "")
{
_counter = new PerformanceCounter(category, counter, instance, readOnly: true);
this.Name = name;
}
public string Name { get; set; } PerformanceCounter _counter; public float Value
{
get
{
return _counter.NextValue();
}
}
}
}
注:通过nuget导入Diagnostics类库
4封装性能计数器的业务逻辑
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web; namespace SignalR.Counters
{
public class PerfCounterService
{
List<PerfCounterWrapper> _counters; public PerfCounterService()
{
this._counters = new List<PerfCounterWrapper>();
_counters.Add(new PerfCounterWrapper("Processor", "Processor", "% Processor Time", "_Total"));
_counters.Add(new PerfCounterWrapper("Paging", "Memory", "Pages/sec"));
_counters.Add(new PerfCounterWrapper("Disk", "PhysicalDisk", "% Disk Time", "_Total"));
} public dynamic GetResults()
{
return _counters.Select(c => new { name = c.Name, value = c.Value }
);
} }
}
5创建我们的工作目录-hubs并添加一个hub
using Microsoft.AspNet.SignalR;
using Microsoft.AspNet.SignalR.Hubs;
using SignalR.Counters;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Web; namespace SignalR.Hubs
{
//指定该hub的名字,用于在前台中创建使用
[HubName("PerfHub")]
public class PerfHub : Hub
{
public PerfHub()
{
StartCounterCollection();
} private void StartCounterCollection()
{
Task.Factory.StartNew(async () =>
{
var perfService = new PerfCounterService();
while (true)
{
var results = perfService.GetResults();
Clients.All.newCounters(results);
await Task.Delay();
}
}, TaskCreationOptions.LongRunning);
}
//发送信息
public void Send(string name, string message)
{
Clients.All.addSomeMessage(name, message);
}
}
}
页面的内容
@model dynamic
@{
ViewBag.Title = "Index";
} <h2>Index</h2> <div class="container">
<input type="text" id="message" />
<input type="button" id="sendmessage" value="Send" />
<input type="hidden" id="displayname" />
<ul id="discussion">
</ul>
</div> <script src="~/Scripts/jquery-1.6.4.js"></script> <script src="~/Scripts/jquery.signalR-2.2.0.min.js"></script>
<script type="text/javascript" src="~/signalr/hubs"></script> <script>
$(function () { // 链接hub
var chat = $.connection.PerfHub;
$.connection.hub.logging = true; $.connection.hub.start();
// 执行返回数据 perfhub中的Send中调用的方法签名一致
chat.client.addSomeMessage = function (name, message) {
// 将发送的内容显示在页面
$('#discussion').append('<li><strong>' + htmlEncode(name)
+ '</strong>: ' + htmlEncode(message) + '</li>');
};
// 弹出输入名字的文本框
$('#displayname').val(prompt('Enter your name:', ''));
// Set initial focus to message input box.
$('#message').focus();
//启动hub的工作 $.connection.hub.start().done(function () { $('#sendmessage').click(function () {
// 发送信息
chat.server.send($('#displayname').val(), $('#message').val());
//清空输入的内容
$('#message').val('').focus();
});
});
}); function writeEvent(eventLog, logClass) {
var now = new Date();
var nowStr = now.getHours() + ':' + now.getMinutes() + ':' + now.getSeconds();
$('#discussion').prepend('<li class="' + logClass + '"><b>' + nowStr + '</b> ' + eventLog + '.</li>');
}
// This optional function html-encodes messages for display in the page.
function htmlEncode(value) {
var encodedValue = $('<div />').text(value).html();
return encodedValue;
}
</script>
SignalR的简单实现的更多相关文章
- [SignalR]一个简单的聊天室
原文:[SignalR]一个简单的聊天室 1.说明 开发环境:Microsoft Visual Studio 2010 以及需要安装NuGet. 2.添加SignalR所需要的类库以及脚本文件: 3. ...
- SignalR代理对象异常:Uncaught TypeError: Cannot read property 'client' of undefined 推出的结论 SignalR 简单示例 通过三个DEMO学会SignalR的三种实现方式 SignalR推送框架两个项目永久连接通讯使用 SignalR 集线器简单实例2 用SignalR创建实时永久长连接异步网络应用程序
SignalR代理对象异常:Uncaught TypeError: Cannot read property 'client' of undefined 推出的结论 异常汇总:http://www ...
- SignalR的简单实现消息广播
之前由于一个项目的需要(简单说一下,一个网页游戏,裁判的页面点击开始按钮,玩家便可以开始游戏),研究了很久,最终一个同事跟我推荐了SignalR.距离项目结束已经有一段时间了,再来回顾一下Signal ...
- SignalR的简单实现(一)
原文:SignalR的简单实现(一) ASP.NET SignalR是ASP.NET开发人员的一个新库,它使您的应用程序添加实时Web功能变得非常简单.什么是"实时网络"功能?能够 ...
- SignalR的简单使用(二)
原文:SignalR的简单使用(二) 之前提到SignalR代理在网页,通过生成的Js来完成相关的功能.但我不禁想一个问题, 难到SignalR的服务端就能寄存在web端吗,通过访问网页能方式才能启动 ...
- SignalR + MVC5 简单示例
本文和前一篇文章很类似,只不过是把 SignalR 应用在了 MVC 中 新建项目,选择 MVC 模板 安装 SignalR Install-Package Microsoft.AspNet.Sign ...
- SignalR 前期简单配置
一.随便你在哪个命名空间下新建一个Startup类,并在在该类中注册SignalR. using Owin; using System; using System.Collections.Generi ...
- SignalR简单示例教程入门版
上周五最后一天在公司上班,无聊之余就想做点什么.介于之前有人让我做个简易版的在线聊天的,于是乎就打算花一天时间来弄下关于SignalR的简单教程制作一个在线的聊天的. 1:前端用了国产的一个MVVM框 ...
- SignalR循序渐进(一)简单的聊天程序
前阵子把玩了一下SignalR,起初以为只是个real-time的web通讯组件.研究了几天后发现,这玩意简直屌炸天,它完全就是个.net的双向异步通讯框架,用它能做很多不可思议的东西.它基于Owin ...
随机推荐
- PHP正则表达式匹配中文字符
网上有很多类似的文章,但往往都不能用 所以记录一下 preg_match_all("/([\x{4e00}-\x{9fa5}])/u", $input, $match); 注意:限 ...
- dedecms list 判断 每隔3次输出内容
{dede:list pagesize='12' runphp='yes'} [field:global name=autoindex runphp="yes"](@me%3==0 ...
- javascript 作用域例子
for(var i=0,l=url1.length;i<l;i++){ var url = url1[i]; setTimeout(function(){ window.open(url); } ...
- CircleLayout
CircleLayout https://developer.apple.com/library/ios/samplecode/CircleLayout/Introduction/Intro.html ...
- 【360开源】thinkjs:基于Promise的Node.js MVC框架 (转)
thinkjs是360奇舞团开源的一款Node.js MVC框架,该框架底层基于Promise来实现,很好的解决了Node.js里异步回调的问题.360奇舞团(奇虎75Team),是奇虎360公司We ...
- 【转】XML之命名空间的作用(xmlns)
原文链接:http://blog.csdn.net/zhch152/article/details/8191377 命名空间的作用,下面的内容是转载的,大家可以看看: 问题的出现:XML的元素名字 ...
- CMake编译linux C++
CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程).他能够输出各种各样的makefile或者project文件,能测试编译器所支持的C++特性,类似UNIX下的 ...
- labview视频采集IMAdx
grab(连续采集) 摄像头打开之后便一直采集图像,存储在IMAQ开辟的临时空间里,只要while循环不断的读取临时空间就可以显示当前图像(grab调用的是image句柄)
- Python pexpec 解决scp ssh
paswd_key = '.*assword.*' 匹配Password ssh_newkey = '.*(yes/no).*' 匹配 Are you sure you want to contin ...
- Dom操作的分类
1.DOM core 使用DOM core来获取表单对象的方法: document.getElementByTagName("form"); 使用DOM Core来获取某元素的sr ...