码迷,mamicode.com
首页 > 其他好文 > 详细

SignalR的简单实现

时间:2015-04-28 18:04:55      阅读:188      评论:0      收藏:0      [点我收藏+]

标签:

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(2000);
                }
            }, 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的简单实现

标签:

原文地址:http://www.cnblogs.com/liuchang/p/4463344.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!