帮助正确设计通用套接字服务器

时间:2010-07-15 16:41:50

标签: java oop architecture sockets

我在java中创建了一个通用的'SocketServer'类,它接受以下参数: 字符串地址,int端口,类socketProtocol,String encryptionType,int backlogSize

基本上,我希望其他开发人员能够在他们的项目中实例化这个类,并为加密,积压,地址,端口设置一些简单的选项。此时他们必须设计协议。 SocketProtocol是一个启用sendMessage和receiveMessage的接口(以及其他一些)。

此时,该类的用户应该只实现SocketProtocol并将该类(即MySocketProto.class)传递给SocketServer实例,该实例将通过.newInstance()为每个传入连接实例化一个协议副本。 ;

这有意义吗?有没有更简单的方法来建立这种类型的功能?我不喜欢将类类型传递给服务器的想法,它看起来很奇怪。

谢谢大家, 克里斯

2 个答案:

答案 0 :(得分:1)

在这种情况下我会使用Factory pattern。链接的维基百科示例有点冗长,但它可以非常简单:

public interface ISocketProtocolFactory {
    ISocketProtocol buildProtocol();
}

然后,您的SocketServer构造函数会获取实现ISocketProtocolFactory的内容的实例,并随时询问新的ISocketProtocol

这将为您的用户提供构建ISocketProtocol实例的更大灵活性,处理具有类参数的“肮脏”。

答案 1 :(得分:0)

我认为每个端口都有自己的协议。考虑到这一点,您将为端口指定它。

我过去做过的方法是让实现者传入一个继承自的类:

public Interface ProtocolInterface
{
   public void serve(InputStream in, OutputStream out) throws IOException
...

其中InputStream和OutputStream是输入并输出到Socket