2014-07-13 117 views
1

我正在使用SingalR OWIN項目並一次查看limit the number of connected clientsSignalR限制連接數

我有下面的代碼追蹤連接數:

public override Task OnConnected() 
if (ConnectionManager.IsAllowed) // checks number of connected clients < 3 
{ 
    ConnectionManager.connectedClients++; 
    _log.Debug("Connected = " + ConnectionManager.connectedClients); 
    return base.OnConnected(); 
} 
else 
{ 
    return null; // I thought this would reject the incoming connection 
        // but it does not. 
} 
} 

有誰知道我需要做的,拒接新的連接?我在網上找不到任何例子。

任何建議將是偉大的。

謝謝。

回答

0

我不是SignalR的專家,如果其他人有內置的方式,我會很樂意刪除它,但我只是讓我的函數表明連接被拒絕。例如,您可以返回一個布爾值並檢查客戶端是否允許,然後採取相應措施。如果連接時需要返回某些內容,請返回包含bool IsSuccess的複雜類型以及要返回的任何類型的屬性,然後再次檢查客戶端是否爲IsSuccess。無論如何,不​​像SignalR積極拒絕連接會做更多的事情。例如,除非你想要,例如,如果客戶端在達到限制之後連接,則拋出404。

如果有一些通過web.config設置連接限制的內置方式,我不會感到驚訝,但這就是我的做法。那麼你也有更多的控制權。例如,如果你想,你可以告訴客戶有多少人連接。只是一個例子。

編輯:

我原來不知道你在OnConnected方法。再次強調,有一個更好的選擇是可以想象的,例如我不知道如果在該方法中拋出異常會發生什麼情況。但是在我見過的SignalR的大多數實際實現中,都有一種自己編寫的「入口方法」。例如,客戶可能會呼叫和請求加入特定的聊天室,就像典型的例子一樣。我親自把我的支票放在那裏。然後你可以簡單地返回一個bool是否允許他們進入。

即使你還沒有其中一個,你總是可以爲BeginListening添加一些東西,並在那裏做檢查。

+1

感謝您的迴應,當OnConnected()返回任務類型時,我將如何返回布爾知道? –

+0

我已經添加了一些到我的答案。 –

+0

感謝您的建議,我已經實施了上述措施,並從onConnected事件中撤銷了授權責任。 –