我是程序汪 2015-11-05 05:57 采纳率: 0%
浏览 1459

java socketServer服务端可以把多个并成一个写

旧项目代码socketServer代码太多,东一个西一个,很不方便维护。
我打算,把所有socketServer整合到一个代码里来,集中管理。
以前30socketServer接口,要写30个类,太多,入口不统一。
我想把入口统一,先一个类,然后根据不同client的请求,分派到不同业务类
去处理业务。
不知道,可不可行。
因为Socket client = server.accept()还; 是阻塞的。所以一时半会
还想不出,什么办法,把多个Socket client = server.accept(),放在同一个代码里,
能够,响应不能socket接口客户端请求。
大神,我这想法可以实现不。
如果能,要利用什么技术,实现。

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-04 16:41
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    在Java中,我们可以使用线程池(ThreadPoolExecutor)和Callable接口来实现你所描述的功能。以下是一个简单的示例:

    import java.util.concurrent.*;
    
    public class SocketServer {
    
        private ExecutorService executor = Executors.newFixedThreadPool(10);
    
        public void handleClient(Socket client) {
            Callable<Void> task = new RunnableTask(client);
            executor.execute(task);
        }
    
        private static class RunnableTask implements Callable<Void> {
            private final Socket client;
    
            public RunnableTask(Socket client) {
                this.client = client;
            }
    
            @Override
            public Void call() throws Exception {
                // 处理客户端请求
                return null;
            }
        }
    
        public void start() {
            try (Socket client = new Socket()) {
                System.out.println("Accepting a connection...");
                handleClient(client);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    
        public static void main(String[] args) {
            SocketServer server = new SocketServer();
            server.start();
        }
    }
    

    在这个例子中,我们创建了一个固定大小的线程池,并且将每个Socket连接都分配给不同的线程进行处理。这样,即使有多个Socket同时到达,也可以保证不会出现冲突。同时,我们也实现了RunnableTask这个类,它继承了Callable接口,因此可以在多线程环境中运行。

    注意:这个示例是基于Java SE 8或更高版本编写的。如果你正在使用的是其他版本的Java,可能需要对一些方法的参数类型或者返回值类型进行调整。

    评论

报告相同问题?