zoukankan      html  css  js  c++  java
  • 一步一步学习SignalR进行实时通信_7_非代理

    一步一步学习SignalR进行实时通信_7_非代理

    标签(空格分隔): SignalR


    前言

    距离上次写博客已经一个多月了,一直想抽空写,却一直没时间写。现在紧接着要开始毕业设计了,工作的同时还要抽时间完成毕业设计,心也是有些累。由于自己是个.NET迷,自己的工作也是.net开发,老师给的毕业设计百分之八九十都是安卓java相关,虽然之前也学过但是自己还是喜欢.net开发,今天突发奇想,做个和Singalr相关的毕业设计,将自己的想法以及应用场景和老师提了下,还是得到了肯定,如果确定了,希望能将自己的毕业设计抽时间写下来能分享给大家。
    所以为什么今天硬是开工继续写,也是为了尽快完成这篇文章,脱了太长时间了。

    代理与非代理

    今天讲的内容是非代理,那为什么不将代理呢?因为之前我们实现的所有功能都是通过代理的方法。那么代理和非代理的区别是什么呢?我也不知道
    但是,据我了解代理可能会造成额外的带宽和处理器的开销,通过代理在安全性也不如非代理,它将操作直接暴露给客户端。(若有不对,请纠正)
    代理的优点:简化开发。
    但是非代理其实也没有想象中的困难,它只是用来不同的语法来做与代理相同的事情。

    建立连接

    当不用代理进行连接时,我们无需引入/Singalr/hubs或者之前我们做的一些配置,如:

    <script src="Scripts/jquery-1.6.4.min.js"></script> <script src="Scripts/jquery.signalR-2.0.0.min.js"></script>
    var connection = $.hubConnection("/realtime");
    connection.start()
        .done(function () {         
            // Code     
        });
    app.MapSignalR("/realtime", new HubConfiguration())

    这些我们统统不需要!
    如果我们不用代理,最好的办法是禁用它们,我们可以通过以下代码配置:

    public void Configuration(IAppBuilder app) 
    {     
        app.MapSignalR(new HubConfiguration()                 
        {                     
            EnableJavaScriptProxies = false                 
        }); 
    }

    即使我们不用自动生成的代理类,我们也需要一个对象来调用和接受服务器的事件。
    首先我们通过createHubProxy手动创建一个代理

    var connection = $.hubConnection(); 
    var proxy = connection.createHubProxy("AlertService");

    调用方法

    通过invoke()执行服务器的操作

    connection.start().done(function () {     
        proxy.invoke("Alert", "I felt a great disturbance in the force"); 
        });

    第一个参数:执行服务器的alert方法,此参数不区分大小写
    第二个参数:可以是任意类型,该参数会传递给服务器
    invoke()start()方法一样可以实现promise模式

    proxy.invoke("divide", 100, prompt("Divisor?"))
    .done(function(result) {         
        alert(result);     
    })     
    .fail(function(err) {         
        alert(err);     
    });

    维持状态

    同时我们也可以保持状态

     var proxy = connection.createHubProxy("AlertService");
     proxy.state.MsgId = 1; 
     proxy.state.UserName = "Obi Wan";  

    从服务器接收

    我们通过on()捕获

    proxy.on("ShowAlert", function(msg) {     alert(msg); });

    第一个参数是服务器指定调用的方法名,第二个参数是匿名方法将被执行。

    结束语

    今天简单介绍一下代理与非代理的区别,下一讲将分析一个小例子来掌握。

    本文发布至作业部落

    参考文献

    SignalR Programming in Microsoft ASP.NET pdf 下载

  • 相关阅读:
    关于系统中账号注册登录的一些想法
    关于Data URLs svg图片显示出错和浏览器URL hash #
    我的Spring Boot学习记录(一):自动配置的大致调用过程
    Java工具类——通过配置XML验证Map
    关于HTTPS的简要内容
    Effective Java目录
    Java 初始化a=2 打印a+++a++为5
    Spring SpringMVC MyBatis配置笔记
    Debian8 部署 laravel 5.3 (php7.0 + nginx)
    Intellij idea配置springMvc4.2.6
  • 原文地址:https://www.cnblogs.com/owenzh/p/11164620.html
Copyright © 2011-2022 走看看