C# 在信号器中记录服务器事件
我正在使用编写一个基于C的web应用程序。到目前为止,我有一个允许公开交流的“大厅”区域,还有一个“会话”区域,5人小组可以在其中进行私人对话,任何服务器交互都只向小组显示 我想做的是在内存中创建一个“logging”对象——每个会话一个,所以如果有三组五个人,我就有三个logging对象 “会话”区域继承自集线器和IDisconnect,并具有多个方法Join、Send、Disconnect等。。这些方法将数据传递回JavaScript客户端,后者调用客户端JS函数。我尝试过使用构造函数方法:C# 在信号器中记录服务器事件,c#,signalr,C#,Signalr,我正在使用编写一个基于C的web应用程序。到目前为止,我有一个允许公开交流的“大厅”区域,还有一个“会话”区域,5人小组可以在其中进行私人对话,任何服务器交互都只向小组显示 我想做的是在内存中创建一个“logging”对象——每个会话一个,所以如果有三组五个人,我就有三个logging对象 “会话”区域继承自集线器和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对象,因为它是自己的类,不扩展Hub/IDisconnect。 一旦您有了这个功能,就在中心上创建一个静态ConcurrentDictionary,它映射信号器组,并使用它们向记录器表示您的会话 当在集线器上触发连接方法时,查找连接所在的组就很容易了=>将日志数据发送到组记录器 当涉及到通过信号器制作房间和其他类型的分组时,结帐
希望这有帮助 集线器始终被创建和处理!除非数据是静态的,否则永远不要在它们中放入你期望能持续的数据 我建议您创建logger对象,因为它是自己的类,不扩展Hub/IDisconnect。 一旦您有了这个功能,就在中心上创建一个静态ConcurrentDictionary,它映射信号器组,并使用它们向记录器表示您的会话 当在集线器上触发连接方法时,查找连接所在的组就很容易了=>将日志数据发送到组记录器 当涉及到通过信号器制作房间和其他类型的分组时,结帐
希望这有帮助 谢谢你,这很有道理,现在我来看看。我对C相对来说比较陌生,所以学习更精细的方面是很好的:现在在Signal中有一个持久连接类型来持久化数据或集线器。感谢这一点-非常有意义,现在我来看看它。我对C相对来说比较陌生,因此了解更精细的方面是很好的:现在在SignalR中有一个持久连接类型来持久化数据或集线器。