【问题标题】:Can one machine act as client and server at same time using socket in Java?一台机器可以在 Java 中使用套接字同时充当客户端和服务器吗?
【发布时间】:2014-06-24 09:03:33
【问题描述】:

我有一个由 5 台机器组成的网络。一台机器称为领导者(服务器),另一台称为追随者(客户端)。我在领导端使用 ServerSocket(使其成为服务器)并在跟随端使用 Socket 使它们成为客户端。这种结构完美运行。

现在,我想为上述网络添加新的更改。我想允许追随者(客户)向其他追随者发送消息。我怎样才能做到这一点?

是否可以通过让每个follower(客户端)都有Socket(连接leader)和ServerSocket(连接follower)来实现?

期待您的来信。

【问题讨论】:

标签: java networking


【解决方案1】:

Leader可以拥有follower列表(每个follower可以有一个唯一的id)。如果一个follower需要将消息传递给另一个follower,他需要将数据传递给Leader,然后leader可以将它发布给预期的follower,或者leader可以将它广播给所有follower。领导者可以为它收到的每个连接运行不同的线程,并维护一个客户端池用于广播。

【讨论】:

  • 但是,我的应用程序的主要目的是减少领导者的负载,因此如果我让跟随者之间的通信由领导者管理,我会给领导者增加额外的负载,这不是可以接受。所以我需要让follower直接实现交流。
  • 那么Aniket提供的解决方案就是最好的选择。跟随者可以在不同的端口上有一个服务器套接字。一旦需要广播消息,服务器/领导者就可以连接到其追随者。并且leader可以发布follower的主机和端口列表,所以follower可以直接交互,不给Leader带来负担。
【解决方案2】:
Can one machine act as client and server at same time using socket in Java?

Socket = IP + port. 只要同一台机器(本地主机)上的两个套接字具有不同的端口,就可以。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-21
    • 2013-09-06
    • 1970-01-01
    • 1970-01-01
    • 2017-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多