【发布时间】:2013-02-08 18:27:49
【问题描述】:
我有一个聊天客户端类
class ChatClient
{
Task ConnectAsync(string server);
Task SendMessageAsync(string message);
Task DisconnectAsync();
}
一旦用户连接了 ConnectAsync,他们就可以调用 SendMessageAsync 向其他用户发送消息。
在底层有一个 Connection 类,它是 Socket 类的一个非常基本的包装器。主要区别之一是它有一个 OnError 事件。
我还使用了一个可观察的消息流(响应式扩展),它从连接中读取数据并从服务器生成传入命令流。
我的问题是——当套接字产生错误时,我最好从哪里处理这个错误?我应该在 OnError 事件处理程序中处理它,还是应该从可观察流中截取错误并在那里处理?
无论哪种方式,我都看不到任何好处或坏处,所以我想知道最佳实践要求什么?
关于在连接类上进行事件的事情总是让我觉得有点 hacky,但我不知道为什么。
有什么建议吗?谢谢
【问题讨论】:
-
我的 2 便士对此:当套接字产生错误时,我最好从哪里处理这个错误?我应该在 OnError 事件处理程序中处理它,还是应该从可观察流中截取错误并在那里处理它。我认为答案取决于应用程序。我个人喜欢将它一直传播回来(甚至是 UI)。这是因为这样前端有更多关于错误的信息来告诉用户,而不仅仅是网络错误。
-
和我的第二个便士:在连接类上举办一个事件总是让我觉得有点 hacky。我不认为它是hacky。事实上,在某些实现中,我已经看到连接类发送回包含消息的事件。这可能是有道理的,对吧?因为数据是异步到达的。例如,当您执行 ConnectAsync 时,您如何知道连接是否已实际建立?你可能要问了,对吧?但询问需要轮询。这对我来说似乎更 hacky。
标签: c# sockets system.reactive