我使用JBoss Netty编写了一个java服务器和客户端程序。为了将一些数据发送到远程客户端并从它们接收数据,我已经为每个事件定义了事件和处理程序。在线上,每个事件只是一个字节(操作码)头,后跟消息字节。最初我只支持TCP,并在我的程序中定义了LOG_IN,LOG_OUT,DATA_IN,DATA_OUT等事件。 例如
public static final int LOG_IN = 0x08;
public static final int LOG_OUT = 0x0a;
然后我决定也支持UDP并最终得到LOGIN_UDP,LOGIN_TCP,DATA_OUT_TCP或DATA_OUT_UDP等事件,以便根据生成的事件,正确的事件处理程序将获取事件并将其写入适当的套接字和远程端口。
正如您所看到的,我面临的第一个问题是,在添加UDP时,我几乎将已定义事件和事件处理程序的数量增加了一倍。有没有更好的方法来处理这种情况?
我面临的第二个(次要)问题是当你从服务器写到客户端时,像DATA_OUT这样的事件是有意义的,但是当在客户端接收相同的事件时“DATA_OUT”没有意义,因为它是实际上是客户端的传入数据。目前,我有一个解码器,它将DATA_OUT转换为DATA_IN。这是最好的方法吗?
答案 0 :(得分:0)
您可以使用工厂模式基于类型通道(即TCP或UDP)创建连接。在这种情况下,您必须定义一次其他细节
而是调用DATA_OUT,您可以将其称为SERVER_OUT,方式与SERVER_IN
相同