首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为多个客户服务

为多个客户服务
EN

Stack Overflow用户
提问于 2013-09-16 05:42:25
回答 1查看 847关注 0票数 1

我想知道一个使用服务器套接字的简单服务器程序是否真的能够同时处理多个客户端?我正在创建一个需要处理多个客户端的服务器程序。有相同的端口号。但问题是,程序一次只能为一个客户端服务,为了服务另一个客户端,必须终止第一个连接。

以下是代码:

代码语言:javascript
复制
try{

        ServerSocket server = new ServerSocket(PORT);
        System.out.println("Server Running...");
        while(true){
            Socket socket = server.accept();
            System.out.println("Connection from:"+socket.getInetAddress());
            Scanner in = new Scanner (socket.getInputStream());
            PrintWriter output = new PrintWriter(socket.getOutputStream());
        }
    }catch(Exception e){
        System.out.println(e);
    }

是否有可能在这里添加java代码,以便该程序同时为多个客户端服务?

EN

回答 1

Stack Overflow用户

发布于 2013-09-16 05:46:23

您发布的代码实际上并没有对客户端连接做任何事情,这使您很难帮助您。但是是的,服务器完全有可能处理多个并发连接。

我的猜测是,问题在于,您使用同步IO在一个线程上完成了所有工作。这意味着当您在等待来自现有客户端的数据时,您不会接受新的连接。通常,服务器采用两种方法之一:

  • 当线程接受连接时启动线程(或从线程池重用线程),并允许该线程独占处理该连接。
  • 使用异步IO在单个线程(或少量线程)上执行所有操作。

后一种方法可以更有效,但也要复杂得多。我建议您首先使用“每个连接线程”的方法。当您进行实验时,您可以在每次客户端连接时启动一个全新的Thread --但是对于生产用途,您可以使用一个ExecutorService或类似的东西,以便重用线程。

请注意,根据您正在构建的服务器类型,所有这些都很可能是在第三方库中为您完成的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18821069

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档