gpt4 book ai didi

c# - 在 signalR 中记录服务器事件

转载 作者:太空宇宙 更新时间:2023-11-03 20:22:10 25 4
gpt4 key购买 nike

我正在使用 SignalR 编写基于 C# 的 Web 应用程序.到目前为止,我有一个“大厅”区域(允许开放式交流)和一个“ session ”区域(5 人一组可以进行私有(private)对话,并且任何服务器交互只显示给该组)。

我想做的是在内存中创建一个“日志记录”对象 - 每个 session 一个(因此,如果有三组五人,我将有三个日志记录对象)。

'session' 区域继承自 Hubs(和 IDisconnect),并有多种方法(Join、Send、Disconnect 等)。这些方法将数据传回 JavaScript 客户端,后者调用客户端 JS 函数。我试过使用构造函数方法:

public class Session : Hub, IDisconnect
{
public class Logger
{
public List<Tuple<string, string, DateTime>> Log;

public List<Tuple<string, string, DateTime>> AddEvent(string evt, string msg, DateTime time)
{
if (Log == null)
{
Log = new List<Tuple<string, string, DateTime>>();
}
Log.Add(new Tuple<string, string, DateTime>(evt, msg, time));

return Log;
}

}

public Logger eventLog = new Logger();

public Session()
{
eventLog = new Logger();
eventLog.AddEvent("LOGGER INITIALIZED", "Logging started", DateTime.Now);
}

public Task Join(string group)
{
eventLog.AddEvent("CONNECT", "User connect", DateTime.Now);
return Groups.Add(Context.ConnectionId, group);
}

public Task Send(string group, string message)
{
eventLog.AddEvent("CHAT", "Message Sent", DateTime.Now);
return Clients[group].addMessage(message);
}

public Task Interact(string group, string payload)
{
// deserialise the data
// pass the data to the worker
// broadcast the interaction to everyone in the group

eventLog.AddEvent("INTERACTION", "User interacted", DateTime.Now);
return Clients[group].interactionMade(payload);
}

public Task Disconnect()
{
// grab someone from the lobby?
eventLog.AddEvent("DISCONNECT","User disconnect",DateTime.Now);
return Clients.leave(Context.ConnectionId);
}
}

但这会导致每次用户与服务器交互时重新创建 Logger。

有谁知道我如何能够为每个新 session 创建一个 Logger,并向其中添加元素?还是有更简单的方法来做到这一点,而我只是想多了这个问题?

最佳答案

集线器一直在创建和处理!永远不要将您期望持久的数据放入其中(除非它是静态的)。

我建议创建您的记录器对象,因为它是自己的类(不扩展 Hub/IDisconnect)。
一旦你有了它,就可以在集线器上创建一个静态的 ConcurrentDictionary,它将 SignalR 组(使用它们来代表你的 session )映射到记录器。

当您在集线器上触发“加入”方法时,查找连接所在的组很容易 => 将日志记录数据发送到组记录器。

结帐 https://github.com/davidfowl/JabbR当谈到通过 SignalR 制作“房间”和其他类型的分组时

希望这对您有所帮助!

关于c# - 在 signalR 中记录服务器事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12837736/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com