主動從服務器端推送數據到客戶端


主動從服務器端推送數據到客戶端

 

關鍵字: 主動推送, 推送數據, 客戶端推送, 獲取Session, 發送數據, 回話快照

通過Session對象發送數據到客戶端

前面已經說過,AppSession 代表了一個邏輯的 socket 連接,基於連接的操作都應該定義在此類之中。 這個AppSession 類也封裝了通過 socket 發送數據的方法。 你可以使用 AppSession 的方法 "Send(...)" 來發送數據到客戶端:

session.Send(data, 0, data.Length);
or
session.Send("Welcome to use SuperSocket!");

通過 SessionID 獲取 Session

前面提到過,如果你獲取了連接的 Session 實例,你就可以通過 "Send()" 方法向客戶端發送數據。但是在某些情況下,你無法直接獲取 Session 實例。

SuperSocket 提供了一個 API 讓你從 AppServer 的 Session 容器中通過 SessionID 獲取 Session

var session = appServer.GetSessionByID(sessionID);

if(session != null)
    session.Send(data, 0, data.Length);

SessionID是什么?

SessionID 是 AppSession 類的一個屬性,用於唯一標識一個 Session 實例。 在一個 SuperSocket TCP 服務器中,當 Session 一創建, SessionID 就會被賦值為一個 GUID 字符串。 如果你不在 SuperSocket UDP 服務器中使用 UdpRequestInfo,SessionID 就會有客戶端的IP和端口組成。 如果你使用UdpRequestInfo,SessionID將會從客戶端傳過來。

獲取所有連接上的 Session

你也可以從 AppServer 實例獲取所有連接上的 session 然后推送數據到所有客戶端:

foreach(var session in appServer.GetAllSessions())
{
    session.Send(data, 0, data.Length);
}    

如果你啟用了 Session 快照, 這些從 AppServer.GetAllSessions() 獲取的 sessions 將不是實時更新的。 他們是在上次獲取快照時所有連接到服務器的 Session。 快照相關配置,請參考配置文檔。

根據條件獲取 Session

如果你有一個自定義的屬性 "CompanyId" 在你的 AppSession 類之中,如果你想要獲取這個屬性等於某值的 的所有 Session, 你可以使用 AppServer 的方法 GetSessions(...):

var sessions = appServer.GetSessions(s => s.CompanyId == companyId);
foreach(var s in sessions)
{
    s.Send(data, 0, data.Length);
}

和方法 "GetAllSessions(...)" 一樣, 如果你啟用了 Session 快照,這些返回的 session 也一樣也來自於快照之中。


© 2018 - GetDocs.Net - Hosted by BuyVM


免責聲明!

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



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