【问题标题】:Design suggestions for client receiving messages over network客户端通过网络接收消息的设计建议
【发布时间】:2013-02-25 15:40:26
【问题描述】:

我正在编写一个客户端,它通过 TCP 从服务器接收一组不同的消息。我创建了一个简单的测试类,它能够连接到服务器并以 NSData 块的形式接收消息。但是现在我被困在如何从这里开始并且需要一些设计建议。

我的一个想法是为每条消息创建一个协议,通知代理接收到的消息类型和包含该消息的对象:

协议

-(void)didReceiveLifesign:(LifesignMessage*)message;
-(void)didReceiveLocation:(LocationMessage*)message;
...

解析器

-(void)didReceiveData:(NSData*)data {
    int type = getType(data);
    switch(type) {
        case 0: [self.delegate didReceiveLifesign:parseLifesign(data); break;
        case 1: [self.delegate didReceiveLocation:parseLocation(data); break;
        ...
    }
}

但是随着消息数量的增加,我发现这个解决方案很混乱。有没有更漂亮的方法?

【问题讨论】:

    标签: objective-c network-programming


    【解决方案1】:

    每次向系统添加新类型的消息时,您都将添加新代码来处理该特定类型。你无法摆脱这一点。所以,你现在可以真正抽象出来的地方是调度:switch 语句,在你的例子中。

    如果将来添加的消息类型很少,最简单的方法可能是您已经采用的方法:每次只需添加一个新的“案例”。

    另一种方法是允许其他代码注册为“侦听器”/“回调”。这使得调度通用。逻辑变成:

    • 查找消息类型
    • 分派给所有注册的回调/监听器

    新的“问题”是:您现在需要在某个时候注册每个侦听器。这将在某种类型的初始化期间完成。如果您的消息调度程序基本上是整个应用程序的一部分,并且不用于其他地方,那么它可能不值得。

    【讨论】:

      猜你喜欢
      • 2014-07-30
      • 1970-01-01
      • 2020-08-13
      • 2020-07-10
      • 2021-01-15
      • 2017-09-30
      • 2010-12-03
      • 2018-08-06
      • 1970-01-01
      相关资源
      最近更新 更多