gpt4 book ai didi

java - 一个服务器多个客户端

转载 作者:可可西里 更新时间:2023-11-01 02:41:50 26 4
gpt4 key购买 nike

我正在解决以下问题:

  1. 我需要编写一个服务器程序,将接受多个客户端
  2. 所有客户端都从服务器订阅相同的数据,例如股票价格更新。
  3. 每个客户端都可以向服务器发送简单的命令,如“登录”、“停止”

这是我的解决方案,由于我在多线程/tcp 方面不是很有经验,我想知道这是一个好的解决方案吗?如果没有,有没有更好的解决方案?是否有必要为每个客户端套接字创建一个线程?谢谢顺便说一句:抱歉让大家感到困惑,这是一个只涉及 5-10 节课的小项目。

class AcceptThread {
......
public void run () {
ControlThread controlThread = new ControlThread();
controlThread.start();

Socket socket = new Socket(port);
while (!stop) {
Socket s = socket.accept();
controlThread.addClient (s);
}
}
}

class ControlThread {
Set<Scoket> clients;
SendDataThread sendDataThread;

public ControlThread () {
sendDataThread = new SendDataThread();
sendDataThread.start();
}

public void addClient (Socket socket) {
clients.add(socket);
sendDataThread.addListener(socket);
}

public void run () {
......
for (Socket s : clients) {
if (s.getInputStream().available()) {
//read command from s
}
}
......
}
}

class SendDataThread () {
Set<Scoket> listeners;

public void addListener (Socket s) {
listeners.add(s);
}

public void run () {
for (Socket s: listeners) {
// send data to each listener
}
}
}

最佳答案

is it necessary to have a thread for each client socket?

不,事实上,我什至不推荐它。如果它是一个小项目并且您不想使用任何现有的库,我建议您使用 java.nio packageSelectableChannels .使用所谓的选择器,您可以轻松地以非阻塞方式监控客户端的传入数据。

这里有一些有用的链接:

关于java - 一个服务器多个客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4864719/

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