gpt4 book ai didi

java - 服务器处理许多客户端java

转载 作者:行者123 更新时间:2023-12-01 14:41:13 25 4
gpt4 key购买 nike

伙计们!我编写了简单的服务器客户端(udp)应用程序。现在我正在尝试制作接受许多客户端的服务器。据我了解,我需要创建接受和处理客户端的函数,但我对应用程序的结构感到困惑。你能检查一下我的应用程序是否有合适的骨架吗?也许你可以给我一些提示或例子。感谢所有建议! :)

class MultiServer {

private DatagramSocket serversocket;

public MultiServer() {
try {
this.serversocket = new DatagramSocket(6789);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

public void start() throws IOException {
while(true) {
DatagramSocket serversock = serversocket.accept();
new Thread(new ClientHandler(serversock)).start();
}
}

public static void main(String[] args) {
Server1 server = new Server1();
try {
server.start();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}
}

class ClientHandler implements Runnable {

private final DatagramSocket clientsocket;

ClientHandler(DatagramSocket sock) {
this.clientsocket = sock;
}

@Override
public void run() {
//receive packet, send msg, get ip, get portnumber ?
}

}

}

最佳答案

那么您希望您的服务器能够同时处理多个请求?很好,这就是大多数网络服务器的工作方式。您必须了解多线程和并发的基本概念。

一个简单的服务器一次只能处理一件事。如果服务器正在处理其他事情时收到另一个请求,会发生什么情况?什么都没有,所以应用程序效率不高,而且根本不可扩展。

如果您尚未在应用程序中使用多线程并且对并发了解不多,那么现在是尝试的好时机,请阅读 Oracle Concurrency Lesson ,或者网上找个教程,有很多。

现在,一旦(或如果)您知道线程如何工作,请确保尽可能分解您的函数,并查看哪些函数可以同时发生。我能想到的 Web 服务器示例如下:

  • 一个单独的线程,用于监听端口上的请求。收到请求后,将其放入“请求池”并排队等待处理
  • 处理请求的单独线程(或多线程/线程池)

您的结构看起来像是在同一个 Runnable 中接收和处理。无论如何,这只是一个想法,您必须看看什么更适合您的应用程序。另外,看看较新的 Java 版本提供的并发工具,Java 6 和 7 提供了很多可以使用的非常有效的工具(但在我看来也很难理解和使用)。

祝你好运!

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

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