我正在嘗試構建一個聊天應用程序,用戶ID由其自動生成的signalR連接ID表示。在頁面刷新時,連接標識在實例化新連接時發生變化。有沒有辦法在瀏覽器會話結束之前(即直到他在客戶端結束他的會話)持久化用戶的連接ID狀態。如何堅持SignalR連接ID
任何指南或文檔?這真的會有所幫助。
我是信號發生器的新手。所以試圖知道搜索谷歌的許多事情。從這個URL我得到了一個類似的片段http://kevgriffin.com/maintaining-signalr-connectionids-across-page-instances/
他們說這是可能的。問題是如果我們刷新頁面,信號員經常創建一個新的連接ID。我想防止這個,但如何.......
此代碼段。
public class MyConnectionFactory : IConnectionIdFactory
{
public string CreateConnectionId(IRequest request)
{
if (request.Cookies["srconnectionid"] != null)
{
return request.Cookies["srconnectionid"];
}
return Guid.NewGuid().ToString();
}
}
$.connection.hub.start().done(function() {
alert("Connected!");
var myClientId = $.connection.hub.id;
setCookie("srconnectionid", myClientId);
});
function setCookie(cName, value, exdays) {
var exdate = new Date();
exdate.setDate(exdate.getDate() + exdays);
var c_value = escape(value) + ((exdays == null) ? "" : "; expires=" + exdate.toUTCString());
document.cookie = cName + "=" + c_value;
}
我的疑問是它在所有signalr版本中工作嗎?如果沒有,那麼如何在新版本中處理它,特別是在頁面被刷新時不生成新的連接ID。尋找建議。
如果我們使用持久連接類而不是集線器,那麼會發生什麼.....在這種情況下,如果我們在客戶端刷新頁面,連接ID將會持續存在?請指導。 謝謝
感謝您的回答。我需要使用什麼信號器版本來運行你的代碼。我正在使用signalr和VS2010 IDE。所以告訴我你的代碼適用於VS2010版本嗎? – Mou
Clients.User(userName)和 Clients.Client(connectionId)方法有什麼區別。用戶名可能不是唯一的,但connectionId始終是唯一的。所以如果userName不唯一會發生什麼?請指導。謝謝 – Mou
在SignalR 1.0.0中刪除了IConnectionIdFactory。 SignalR 2.0.0中引入了IUserIdProvider。你的VS版本應該不重要。你是正確的,可以是多個SignalR連接具有相同的用戶名。例如,同一用戶可能會在多個瀏覽器選項卡中打開SignalR應用程序。在這種情況下,屬於具有userName的用戶的每個連接都將使用Clients.User(userName)接收發送給該用戶的消息。 – halter73