Java套接字编程:处理多种类型的消息

时间:2011-08-13 17:57:19

标签: java sockets multicast

我正在开发一个简单的多播网络程序,并且对最适合客户端/服务器或客户端/客户端网络的最佳类结构和OOD模式感到好奇。我的困境是我将通过数据报发送不同类型的消息,接收器只看到一堆字节。现在,我已经实现了一种“ID”占位符作为我所有字节数组的第一个字节,以区分包含“hello world”的消息和包含用户坐标的消息。唯一的选择似乎是根据“ID”的内容在我的“接收”方法中只有一大组case语句,但这似乎是不好的做法。只是寻找想法来利用Java的OOD模式和全面的良好编码实践。

在旁注(我认为这有点相关......)对我来说,改为对象流是否有利?在我看来,我仍然会检查每一个进来的instancof。谢谢!

2 个答案:

答案 0 :(得分:2)

有几种可能性,但Strategy Pattern似乎最适合该法案。

在您的情况下,我将创建一个至少包含两个方法的接口,以确定该类是否可以处理该消息(将检查您的ID位),另一个是否实际处理该消息。然后为每种类型的消息创建一个单独的消息处理类。

您的传入消息处理程序将具有这些消息处理对象的集合或列表(通常是每个不同的类,但所有这些对象都实现了该接口)。收到消息后,消息处理程序将遍历消息处理对象,直到找到消息为止,如果没有消息处理器将处理消息,则会发出错误。

答案 1 :(得分:2)

根据具体情况,这里有一些选择。

  1. 您当然可以发送序列化对象,每种消息类型一个。序列化Java对象通常只能在Java应用程序之间工作,但您也可以尝试使用协议缓冲区来实现可互操作的对象(http://code.google.com/p/protobuf/)

  2. 您可以以JSON或XML等可互操作的格式发送文档

  3. 您可以自己制作格式,并根据需要解析文本

  4. 我,我可能会使用Protocol Buffers