Signalr 信号器连接ID

Signalr 信号器连接ID,signalr,Signalr,即使页面刷新,我也会尝试保留我的连接ID。 我在客户端保存了一个cookie,但在尝试检索它时 request.Cookies.Count为0 这是接口实现: public class ConnectionFactory : IConnectionIdPrefixGenerator { public string GenerateConnectionIdPrefix(IRequest request) { if (request.Cookies["signalrc

即使页面刷新,我也会尝试保留我的连接ID。 我在客户端保存了一个cookie,但在尝试检索它时 request.Cookies.Count为0

这是接口实现:

public class ConnectionFactory : IConnectionIdPrefixGenerator
{
    public string GenerateConnectionIdPrefix(IRequest request)
    {
        if (request.Cookies["signalrconnid"] != null)
        {
            return request.Cookies["signalrconnid"].Value;
        }

        return Guid.NewGuid().ToString();
    }
}
这是从Start()函数调用的:

 GlobalHost.DependencyResolver.Register(typeof(IConnectionIdPrefixGenerator), () => new ConnectionFactory());
这是客户端:

function setCookie(cName, value, exdays) {
    var exdate = new Date(2013,1,1,0,0,0,0);
    var c_value = escape(value) + ((exdays == null) ? "" : "; expires=" + exdate.toUTCString ());
    document.cookie = cName + "=" + c_value;
}
(不介意日期)


我看到了很多关于它的帖子,但我不知道有什么区别。

正如@Chris Moutray所指出的,最好不要以这种方式使用ConnectionId。如果我站在你的立场,我会在客户端上创建一个SessionId,将其存储在cookie中,或者将该SessionId而不是connectionId传递,然后将其用作长期会话和短期连接之间的适当映射。(使用UserId作为映射的问题是,用户可以同时从多个位置登录。)

正如@Chris Moutray所指出的,最好不要以这种方式使用ConnectionId。如果我站在你的立场,我会在客户端上创建一个SessionId,将其存储在cookie中,或者将该SessionId而不是connectionId传递,然后将其用作长期会话和短期连接之间的适当映射。(使用UserId作为映射的问题是,用户可以同时从多个位置登录。)

我以前没有使用过SignalR,因此出于兴趣,为什么您希望记住请求之间的connectionID,而不是每次生成新的guid?因为我有一些基于该connectionID的逻辑。也就是说,每个客户端都由其ConnectionID识别,因此我不能在每次页面刷新/客户端转到站点中的其他页面时都有一个“新”客户端。为什么不简单地在连接ID和用户之间创建一个映射,并跟踪连接和断开以维护映射呢。我们的应用程序就是这样做的。我以前没有使用过Signal,所以出于兴趣,为什么您希望记住请求之间的connectionID,而不是每次都生成一个新的guid?因为我有一些基于该connectionID的逻辑。也就是说,每个客户端都由其ConnectionID识别,因此我不能在每次页面刷新/客户端转到站点中的其他页面时都有一个“新”客户端。为什么不简单地在连接ID和用户之间创建一个映射,并跟踪连接和断开以维护映射呢。我们的应用程序就是这样做的。我可以这样做,但是我如何处理群组呢?只能使用Context.ConnectionID添加。如果每次客户端从一页移动到另一页时它都会改变,那么我必须重新注册他。这可能是正确的,这也是我不在SignalR中使用groups功能的原因之一。据我所知,关于谁得到什么消息的逻辑通常比信号器组功能所能处理的更复杂。因此,我通常会在我称之为“会话”(可以在多个连接之间保持)和信号器连接之间保持映射;我自己的“组”(我称之为房间)是会话组,而不是连接。据我所知,对于简单的场景,信号器组是一种方便的功能;而你的不是。我可以这样做,但是我如何处理这些群体呢?只能使用Context.ConnectionID添加。如果每次客户端从一页移动到另一页时它都会改变,那么我必须重新注册他。这可能是正确的,这也是我不在SignalR中使用groups功能的原因之一。据我所知,关于谁得到什么消息的逻辑通常比信号器组功能所能处理的更复杂。因此,我通常会在我称之为“会话”(可以在多个连接之间保持)和信号器连接之间保持映射;我自己的“组”(我称之为房间)是会话组,而不是连接。据我所知,对于简单的场景,信号器组是一种方便的功能;而你的不是。