SocketRpcServer.java 1.9 KB
Newer Older
S
shuang.kou 已提交
1
package github.javaguide.remoting.transport.socket;
2

3 4 5 6
import github.javaguide.provider.ServiceProvider;
import github.javaguide.provider.ServiceProviderImpl;
import github.javaguide.registry.ServiceRegistry;
import github.javaguide.registry.ZkServiceRegistry;
7
import github.javaguide.utils.concurrent.ThreadPoolFactoryUtils;
8
import lombok.extern.slf4j.Slf4j;
9 10

import java.io.IOException;
11
import java.net.InetSocketAddress;
12 13 14 15 16 17 18 19
import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.ExecutorService;

/**
 * @author shuang.kou
 * @createTime 2020年05月10日 08:01:00
 */
20
@Slf4j
S
shuang.kou 已提交
21
public class SocketRpcServer {
22

23
    private final ExecutorService threadPool;
24 25 26 27
    private final String host;
    private final int port;
    private final ServiceRegistry serviceRegistry;
    private final ServiceProvider serviceProvider;
28

29 30 31 32

    public SocketRpcServer(String host, int port) {
        this.host = host;
        this.port = port;
33
        threadPool = ThreadPoolFactoryUtils.createDefaultThreadPool("socket-server-rpc-pool");
34 35
        serviceRegistry = new ZkServiceRegistry();
        serviceProvider = new ServiceProviderImpl();
36 37
    }

38 39
    public <T> void publishService(T service, Class<T> serviceClass) {
        serviceProvider.addServiceProvider(service, serviceClass);
40 41 42
        serviceRegistry.registerService(serviceClass.getCanonicalName(), new InetSocketAddress(host, port));
        start();
    }
43

44 45 46
    private void start() {
        try (ServerSocket server = new ServerSocket()) {
            server.bind(new InetSocketAddress(host, port));
47
            log.info("server starts...");
48 49
            Socket socket;
            while ((socket = server.accept()) != null) {
50
                log.info("client connected");
S
shuang.kou 已提交
51
                threadPool.execute(new SocketRpcRequestHandlerRunnable(socket));
52
            }
53
            threadPool.shutdown();
54
        } catch (IOException e) {
55
            log.error("occur IOException:", e);
56 57
        }
    }
58

59
}