• SignalR的简单实现(一)


       ASP.NET SignalR是ASP.NET开发人员的一个新库,它使您的应用程序添加实时Web功能变得非常简单。什么是“实时网络”功能?能够实时地将服务器端代码推送到连接的客户端的能力。

    您可能已经听说过WebSockets,一种新的HTML5 API,可以实现浏览器和服务器之间的双向通信。SignalR将在可用的封面下使用WebSockets,如果不是,您的应用程序代码保持不变,则可以正常地回退到其他技术和技术。

    SignalR还提供了一个非常简单的高级API,用于在ASP.NET应用程序中执行服务器到客户端RPC(在客户端的浏览器中从服务器端.NET代码调用JavaScript函数),以及为连接管理添加有用的钩子,例如连接/断开事件,分组连接,授权。

                                                                                                                                                                                           ---来自SignalR的官方说明

      根据SignalR的官网教程,做一些简单的解析。

    1.想要使用SignalR要引入它的组建,Microsoft.AspNet.SignalR。

    在你的web项目中,应用NuGet包工具引入。怎么引入包可以到NuGet的官网看教程。

    2.新建一个SignalR集线器类,这样就会得到一个集成自Hub的类,

    可以通过打标签的方式改变集线器的名字,这在客户端代码会用到。

    方式是[HubName("myHub")],命名空间是在Microsoft.AspNet.SignalR.Hubs下。

    3.引入一个配置类,这里用的是Startup,可以通过OWIN Startup类获得。

    代码如下:

    using Microsoft.Owin;
    using Owin;
    [assembly: OwinStartup(typeof(SignalRChat.Startup))]
    namespace SignalRChat
    {
        public class Startup
        {
            public void Configuration(IAppBuilder app)
            {
                // Any connection or hub wire up and configuration should go here
                app.MapSignalR();
            }
        }
    }
    

      这个类现在的作用就是配置。其中app.MapSignalR();就是配置所有的集线器。

    其中IAppBuilder在Owin命名空间,OwinStartup在Microsoft.Owin命名空间。

    4.客户端(这里使用的是网页的客户端,是用js代理的)

    引入SIgnalR组件的时候,会生成一个Scripts文件,里面包含JQuery和signaR的js文件。

    在做网页前可以先测试signalR是否配置成功,通过 项目地址/signalr/hubs如能打开,

    显示文件就证明配置成功了。文件里说明了代理的js‘类’;

    在客户端按顺序引入JQuery、signalr。最后引入<script src="/signalr/hubs"></script>

    这样一个文件,因为它是动态生成的,所以看不见,这个就是之前测试所在的文件集;

    接下来就可以写js代码了:

    var proxy=$.connection.chatName;其中chatName是你集线器的名称。这样就拿到了hub代理成员。

    这里我测试的是hub的名字首字母是小写的,大写的会找不到,具体的可以通过"/signalr/hubs"这个路径找。

    proxy.client.addMessage(function(){

    alert("对了");

    });

    //这里是注册客户端的方法,让服务端调用,也就是之前新建的hub。

    $.connection.hub.start().done(function(){

    $("#btn").click(function(){

    proxy.server.hello();

    });

    });

    //start是开启连接,done是开启连接成功后的回调函数

    //在这个回调函数中调用了服务端hello方法。

    其中服务段方法为

    public void Hello()
            {
                Clients.All.addMessage();
    
            }
    

      在服务端又调用了客户端的方法,addMessage就是注册在服务端的方法。

    $.connection 拿到建立的这个连接。
    $.connection.hubName 拿到连接里对应的hub对象
    $.connection.hubName.client 拿到客服端对象。
    $.connection.hubName.server 拿到服务端对象。
  • 相关阅读:
    guava快速入门
    自旋锁解决StackOverflowError案例
    Java内存模型
    Java中sleep()与wait()区别
    wait()、notify()、notifyAll()与线程通信方式总结
    同步代码块、同步方法、锁总结
    如何把Go调用C的性能提升10倍?
    记一次虚拟化环境下Windows IO性能的解析
    win7(64bit)使用mingw64配置gtkmm
    你的深度工作,决定了你的后半生(刻意练习,最主要的竞争对手是无聊)
  • 原文地址:https://www.cnblogs.com/xiaoai123/p/6635344.html
Copyright © 2020-2023  润新知