gpt4 book ai didi

java - 在库内配置套接字连接

转载 作者:行者123 更新时间:2023-12-02 09:11:38 24 4
gpt4 key购买 nike

我目前正在为我的一个程序开发一个库。在内部,库本身通过套接字连接到服务器。目前,诸如目标主机和端口之类的套接字设置是通过 IConnection 配置的,这是我想为库用户提供的两个类之一:

public interface IConnection {
public void connect(String hostname, int port); //lib connects to a server internally
public void disconnect();
}

一旦通过 IConnection 建立到服务器的连接,就可以通过 IRequestor(库的第二个接口(interface))触发请求:

public interface IRequestor {
public String processRequest(String request);
}

我没有看到这种设计有什么大的缺点,但是,有两件事让我困扰:

  1. 该库假设用户了解先发生关系,这意味着用户首先必须通过 IConnection 建立连接才能使用该库的主要功能,即通过以下方式触发请求我请求者。只要我提供完整的文档,或者是否有更好的设计解决方案,可以自动强制执行事前发生关系,这是否可以接受?

  2. 套接字在整个库中用作字段。当用户断开连接并重新连接到不同的服务器时,许多类的状态会发生变化(它们现在请求不同的服务器)。因此,突然间,这些类向不同的服务器发出请求,并且很难推断“套接字连接”的更改者、地点和时间(因为套接字作为字段并通过内存“交换”,而不是方法传递)。当然,我总是可以通过 IRequestor 指定服务器,但这似乎也不正确,例如

    processRequest(String request, String hostname, int port)

最佳答案

如果在使用连接之前必须明确建立连接,我不认为这是一个问题 - 很多事情都是这样工作的。

我可能会尝试通过在 IConnection 上使用工厂方法来返回绑定(bind)到特定连接的 IRequestor 对象,从而使其在 API 中更加直观。这明确表明缺一不可。它确实假设您必须将 IConnection 传递回您的库的用户。

此外,为了防止严重困惑,我可能会将 IConnection 对象设为不可变 - 您可以建立它并关闭它,但不能更改它。如果您想要连接到不同的服务器,请创建不同的 IConnection 对象。意外的状态变化会导致严重的错误。

关于java - 在库内配置套接字连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59372656/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com