asp.net signalR 專題—— 第四篇 模擬RPC模式的Hub操作


  在之前的文章中,我們使用的都是持久連接,但是使用持久連接的話,這種模擬socket的形式使用起來還是很不方便的,比如只有一個唯一的

OnReceived方法來處理業務邏輯,如下圖:

1         protected override Task OnReceived(IRequest request, string connectionId, string data)
2         {
3             return Connection.Broadcast(data);
4         }

 

但是在singlaR體系中並不是這樣,我們還有更加平易近人的一個類似RPC的Hub層,如下圖一樣:

是不是很好奇??? 下面我們來看看這個Hub層怎么構建。

 

一:新建hub集線器層

    選擇web模板,下面有一個singlaR集線器類的模板,新建即可,在這個模板中有一個示例代碼,Clients.All.hello() 就是用來調用客戶端的hello方法,

而MyHub1中的Hello()用來讓客戶端調用,如此這樣來實現雙向通訊,如下圖:

 

二:在Startup中注冊

  其實注冊很簡單,比持久連接還容易,因為持久連接需要一個“類”map一個“url”這樣的模式,而Hub就不需要了,它就是用一個默認的singlar路徑

map整個hub,比如下圖中的提示:

 

三:實現客戶端

    客戶端實現的話,有代理一說和無代理一說,無代理的話,我們自己createProxy,有代理的話就是利用動態生成一個js文件進行編程。

 

1. 無代理模式

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title></title>
    <meta charset="utf-8" />
    <script src="scripts/jquery-1.10.2.js"></script>
    <script src="scripts/jquery.signalR-2.1.2.js"></script>
</head>
<body>
    <script type="text/javascript">
        //無代理
        var conn = $.hubConnection();

        var proxy = conn.createHubProxy("MyHub1");

        //注冊客戶端方法 “hello”
        proxy.on("hello", function (data) {
            console.log("客戶端方法被調用");
        });

        conn.start().done(function (data) {

            //調用服務器方法
            proxy.invoke("Hello");

        });
    </script>
</body>
</html>

 

從上面可以看到,invoke方法就是調用服務器方法的操作,比如這里服務端的Hello方法,js中的on就是用來綁定客戶端方法,讓服務器調用,

然后我們運行一下:

 

2. 有代理模式

  有代理的模式下,需要動態生成一個js,使用方式就是script引用。

<script src="/signalr/js"></script>

 

然后運行程序之后,就有了自動生成的一個js文件,是不是很神奇~~~

 

有了這個js之后,我們就可以方便的編程了,但是有個遺憾點就是,js是在程序運行后才生成的,這樣的話,在代碼編程的時候是無法有這個動態生

成的js文件,唯一可以做到的就是:先將運行好的js代碼copy到script文件夾下面,添加引用之后,就可以在vs中編程了,如下圖:

好了,有人說這種方式不是很方便,確實不方便,我們也有更高級的用法,那就是使用singlar.utils下面的signlar.exe +vs事件生成,這種模式

可以參考本頁面右上角的微博。

 

好了,就此打住~,繼續忙活了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM