我使用 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。这是最好的方法吗?