asp.net signalR 專題—— 第三篇 如何從外部線程訪問 PersistentConnection

 

      在前面的兩篇文章中,咱們講到的都是如何將消息從server推向client,又或者是client再推向server,貌似這樣的邏輯沒什麼異常,可是放在真實javascript

的環境中,你會很快發現有一個新需求,如何根據第三方系統的數據變化來即時的將新數據推送到各個客戶端,好比下面這樣:html

ok,原理就是上面的這張圖,若是咱們Server中的「監控程序」發現有更新,這個時候,監控程序須要將更新的數據送給server程序,而後由server程序java

推送到各個客戶端,那下面咱們該怎麼作到呢?jquery

 

一:GlobalHost 屬性ide

     首先咱們簡單的看一下它的解釋,叫作「提供對默認主機信息的訪問」,能夠看到,這是一個所謂的全局設置,裏面的5個屬性,個個都很是重要,由於ui

對他們的設置,影響的都是全局性的,好了,做爲這篇咱們關注的就是其中之一ConnectionManager屬性,以下圖:spa

它呢,就是獲取你當前的Connection鏈接,好了,廢話很少說,咱們來作一個例子看一看。code

 

二:實例演示server

1. 僞造「外部系統」htm

 在這裏我就Fake一個單獨頁面(mytest.aspx),僞裝從外面獲取到了"我是mytest.aspx"這條數據,以下:

 

在上圖中,你也看到了GetConnectionContext方法是接受一個泛型的參數,而這個「泛型參數」,就是你的PersistentConnection實現類,這裏也就

是MyConnection1,固然這裏不光能夠訪問Persistent,還能夠訪問Hub類,這個咱們放到後續和你們講解。

 

2. 開啓兩個客戶端

  開啓這兩個就是爲了鏈接到咱們的server,僞裝多用戶,也就是PersistentConnection類,以下:

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

        conn.start().done(function (data) {
            console.log(data.id);
        });

        conn.received(function (data) {
            console.log(data);
        });

    </script>
</body>
</html>
    public class MyConnection1 : PersistentConnection
    {
        protected override Task OnConnected(IRequest request, string connectionId)
        {
            Debug.WriteLine("OnConnected");
            return Connection.Send(connectionId, "Welcome!");
        }

        protected override Task OnReceived(IRequest request, string connectionId, string data)
        {
            Debug.WriteLine(data);
            return Connection.Send(connectionId, data);
        }

        protected override Task OnDisconnected(IRequest request, string connectionId, bool stopCalled)
        {
            Debug.WriteLine("OnDisconnected");
            return base.OnDisconnected(request, connectionId, stopCalled);
        }

        protected override Task OnReconnected(IRequest request, string connectionId)
        {
            Debug.WriteLine("OnReconnected");
            return base.OnReconnected(request, connectionId);
        }
    }

如今兩個client都開啓了,而後各自都收到了server的歡迎信息,以及各自和server通訊的標識。

 

3. 訪問mytest頁面,模擬通知各個客戶端,以下圖:

 

好了,這個也是本篇課程所講的主要東西,雖然不顯眼,可是在真實環境中對您確實很是的有幫助~~~

相關文章
相關標籤/搜索