diff --git a/.idea/compiler.xml b/.idea/compiler.xml
index 28f0749374b7e3f78cfd976ff4da5719f060ca2f..91b58e4c3ca5222c06e285c69a1710aea33c808c 100644
--- a/.idea/compiler.xml
+++ b/.idea/compiler.xml
@@ -8,10 +8,10 @@
+
-
diff --git a/.idea/sonarlint/issuestore/5/e/5eb67949aee12c29202ad46a9a5acdd558cc76b9 b/.idea/sonarlint/issuestore/5/e/5eb67949aee12c29202ad46a9a5acdd558cc76b9
index e32135fa987a8b7061ec98303255d4ffc4b22d9a..5b9054f5f533b817c86559853926c2d8f1f53ae5 100644
--- a/.idea/sonarlint/issuestore/5/e/5eb67949aee12c29202ad46a9a5acdd558cc76b9
+++ b/.idea/sonarlint/issuestore/5/e/5eb67949aee12c29202ad46a9a5acdd558cc76b9
@@ -1,2 +1,6 @@
-U java:S106"9Replace this use of System.out or System.err by a logger.(߫ź8.
\ No newline at end of file
+U java:S106"9Replace this use of System.out or System.err by a logger.(߫ź8.
+[
+java:S1854">Remove this useless assignment to local variable "rpcClient2".(8իؤ.
+L
+java:S1481"/Remove this unused "rpcClient2" local variable.(8ؤ.
\ No newline at end of file
diff --git a/.idea/sonarlint/issuestore/7/0/705e8b4dff28a291cae5396865e0f0fa96cda002 b/.idea/sonarlint/issuestore/7/0/705e8b4dff28a291cae5396865e0f0fa96cda002
index 9b3bb6b2a0971ab013dcab391ee89eefe6cbe118..2bd11508c783a55c0e881c522777f3db2bb9f478 100644
--- a/.idea/sonarlint/issuestore/7/0/705e8b4dff28a291cae5396865e0f0fa96cda002
+++ b/.idea/sonarlint/issuestore/7/0/705e8b4dff28a291cae5396865e0f0fa96cda002
@@ -1,3 +1,3 @@
G
-java:S1948",Make "parameters" transient or serializable.(
\ No newline at end of file
+java:S1948",Make "parameters" transient or serializable.(
\ No newline at end of file
diff --git a/.idea/sonarlint/issuestore/b/d/bddd79bdb61bde8988615c5e657068492162e9e3 b/.idea/sonarlint/issuestore/b/d/bddd79bdb61bde8988615c5e657068492162e9e3
index 726b8cfce002f0a1adeae93c2a287c355deca1b0..7f500511a357392d373c01989ea306e3626bd961 100644
--- a/.idea/sonarlint/issuestore/b/d/bddd79bdb61bde8988615c5e657068492162e9e3
+++ b/.idea/sonarlint/issuestore/b/d/bddd79bdb61bde8988615c5e657068492162e9e3
@@ -1,3 +1,3 @@
C
-java:S1948"&Make "data" transient or serializable.(ݵ8ε .
\ No newline at end of file
+java:S1948%"&Make "data" transient or serializable.(ݵ8ε .
\ No newline at end of file
diff --git a/.idea/sonarlint/issuestore/index.pb b/.idea/sonarlint/issuestore/index.pb
index 3eae6aa0cec6d516515e95ae310f371ece529bf9..1d3666dc17556c69e7a485b3896ed611bf9006bf 100644
--- a/.idea/sonarlint/issuestore/index.pb
+++ b/.idea/sonarlint/issuestore/index.pb
@@ -43,18 +43,42 @@ Xrpc-framework-common/src/main/java/github/javaguide/enumeration/RpcErrorMessage
README.md,8/e/8ec9a00bfd09b3190ac6b22251dbb1aa95a0579d
Qrpc-framework-simple/src/main/java/github/javaguide/registry/ServiceRegistry.java,4/e/4eee7bde8d258a3ad13d5aad4b1fd0f47f159c22
-
-brpc-framework-simple/src/main/java/github/javaguide/remoting/socket/RpcRequestHandlerRunnable.java,3/8/38c46e918cbf2fd183a4d20b5269ff145a5da008
Xrpc-framework-simple/src/main/java/github/javaguide/registry/DefaultServiceRegistry.java,8/a/8a8f0ad1908e89647431f04ae22e059fd159d0c1
-
-Rrpc-framework-simple/src/main/java/github/javaguide/remoting/socket/RpcClient.java,8/c/8c93c859db3a1cebbda725b6225a89337732c108
-
-Wrpc-framework-simple/src/main/java/github/javaguide/remoting/socket/RpcClientProxy.java,3/5/350655342260f50b6ee7ce69dcb361bad3956984
-
-Rrpc-framework-simple/src/main/java/github/javaguide/remoting/socket/RpcServer.java,c/f/cf4f29284214a49bc9f1eeb91eff2d0fbb46e184
-
-Srpc-framework-simple/src/main/java/github/javaguide/remoting/RpcRequestHandler.java,e/b/eb77dbc7968406e86bad5a749c9941052f4f3ccc
:
-.gitignore,a/5/a5cc2925ca8258af241be7e5b0381edf30266302
\ No newline at end of file
+.gitignore,a/5/a5cc2925ca8258af241be7e5b0381edf30266302
+
+Yrpc-framework-simple/src/main/java/github/javaguide/transport/socket/SocketRpcServer.java,4/f/4f3eda1b64c4d4f1b976343bec03d82d70d85cb1
+
+Yrpc-framework-simple/src/main/java/github/javaguide/transport/netty/NettyKryoDecoder.java,7/9/79a691ec739a58083ef0ac1389203a2fbd71f456
+}
+Mrpc-framework-simple/src/main/java/github/javaguide/serialize/Serializer.java,a/2/a281e49e82a8ec2f7ba12a8bcb5f2186f46d0c77
+
+Urpc-framework-common/src/main/java/github/javaguide/exception/SerializeException.java,1/e/1e9d139dec5a90552b914b239037df398d72bfb1
+
+Vrpc-framework-simple/src/main/java/github/javaguide/serialize/kyro/KryoSerializer.java,7/7/77bd9277dc37adef29330c1e78ac2f2485032917
+
+Qrpc-framework-simple/src/main/java/github/javaguide/transport/RpcClientProxy.java,2/8/28a849b18f6cfe08ef45a480dff1b8324e54e765
+|
+Lrpc-framework-simple/src/main/java/github/javaguide/transport/RpcClient.java,a/2/a2293a8598601b418206102ff4a42e86ac5c116d
+
+Yrpc-framework-simple/src/main/java/github/javaguide/transport/socket/SocketRpcClient.java,5/0/50091113d4118fd9d05b7a80930d905591dadd6c
+
+Yrpc-framework-simple/src/main/java/github/javaguide/transport/netty/NettyKryoEncoder.java,e/5/e5d48526802e06de10a1802186f9d33d10ff47aa
+r
+Bexample-server/src/main/java/github/javaguide/NettyServerMain.java,1/7/171870430a59c0c44d9340650aff70ba39acaea8
+r
+Bexample-client/src/main/java/github/javaguide/NettyClientMain.java,9/e/9ec852e88ae42cd2b9eceb76fd0df53f26fa5b76
+
+Wrpc-framework-simple/src/main/java/github/javaguide/transport/netty/NettyRpcClient.java,a/2/a2710f8ba941b11e1d834a0c57a10db363ee4baf
+
+Wrpc-framework-simple/src/main/java/github/javaguide/transport/netty/NettyRpcServer.java,b/a/ba3e575560636fde885135fa5277f533bf61af1c
+
+[rpc-framework-simple/src/main/java/github/javaguide/transport/netty/NettyClientHandler.java,c/d/cd2bc58a2ed26406a5749d14c0148f8237bb9e14
+
+Trpc-framework-simple/src/main/java/github/javaguide/transport/RpcRequestHandler.java,7/6/76847b5dee1f00ac9229b826500369c60abd7b74
+
+irpc-framework-simple/src/main/java/github/javaguide/transport/socket/SocketRpcRequestHandlerRunnable.java,7/d/7dc3255c598b3c45cab343a0a79f2aab582ce3a0
+
+[rpc-framework-simple/src/main/java/github/javaguide/transport/netty/NettyServerHandler.java,9/a/9a59d8568dc116ae0a68f1173ac9ae7c57ee637e
\ No newline at end of file
diff --git a/example-client/src/main/java/github/javaguide/NettyClientMain.java b/example-client/src/main/java/github/javaguide/NettyClientMain.java
index 911cc1ae31cf12a0d0359e478777292c8dbacce2..2e08811396149c686f826bfca1ccf4e2ab092dc3 100644
--- a/example-client/src/main/java/github/javaguide/NettyClientMain.java
+++ b/example-client/src/main/java/github/javaguide/NettyClientMain.java
@@ -2,8 +2,7 @@ package github.javaguide;
import github.javaguide.transport.RpcClient;
import github.javaguide.transport.RpcClientProxy;
-import github.javaguide.transport.netty.NettyRpcClient;
-import github.javaguide.transport.socket.SocketRpcClient;
+import github.javaguide.transport.netty.client.NettyRpcClient;
/**
* @author shuang.kou
diff --git a/example-client/src/main/java/github/javaguide/RpcFrameworkSimpleClientMain.java b/example-client/src/main/java/github/javaguide/RpcFrameworkSimpleClientMain.java
index b15b4fdce2a6fcc865d66c216837eacb13fbba24..08651b74c027d2bc521dff9b1f26bbef69887762 100644
--- a/example-client/src/main/java/github/javaguide/RpcFrameworkSimpleClientMain.java
+++ b/example-client/src/main/java/github/javaguide/RpcFrameworkSimpleClientMain.java
@@ -2,7 +2,7 @@ package github.javaguide;
import github.javaguide.transport.RpcClient;
import github.javaguide.transport.RpcClientProxy;
-import github.javaguide.transport.netty.NettyRpcClient;
+import github.javaguide.transport.netty.client.NettyRpcClient;
import github.javaguide.transport.socket.SocketRpcClient;
/**
diff --git a/example-client/target/classes/github/javaguide/NettyClientMain.class b/example-client/target/classes/github/javaguide/NettyClientMain.class
index 6278923b90986d4984149d381bcaaa18c06534a2..e727e6c89acdaea2148924f1b0a729f3ab3f9166 100644
Binary files a/example-client/target/classes/github/javaguide/NettyClientMain.class and b/example-client/target/classes/github/javaguide/NettyClientMain.class differ
diff --git a/example-client/target/classes/github/javaguide/RpcFrameworkSimpleClientMain.class b/example-client/target/classes/github/javaguide/RpcFrameworkSimpleClientMain.class
index 901803e55642ddc4b2db8d341b06464a785080f7..309ebca05d0928b0c96aab91140f82b0d50c19d4 100644
Binary files a/example-client/target/classes/github/javaguide/RpcFrameworkSimpleClientMain.class and b/example-client/target/classes/github/javaguide/RpcFrameworkSimpleClientMain.class differ
diff --git a/example-server/src/main/java/github/javaguide/NettyServerMain.java b/example-server/src/main/java/github/javaguide/NettyServerMain.java
index c98af16bc4a85121196f104716a33403f1108956..6e88a44914e8ec932a88a3a7447de4d3c04516f9 100644
--- a/example-server/src/main/java/github/javaguide/NettyServerMain.java
+++ b/example-server/src/main/java/github/javaguide/NettyServerMain.java
@@ -1,8 +1,7 @@
package github.javaguide;
import github.javaguide.registry.DefaultServiceRegistry;
-import github.javaguide.transport.netty.NettyRpcServer;
-import github.javaguide.transport.socket.SocketRpcServer;
+import github.javaguide.transport.netty.server.NettyRpcServer;
/**
* @author shuang.kou
diff --git a/example-server/target/classes/github/javaguide/NettyServerMain.class b/example-server/target/classes/github/javaguide/NettyServerMain.class
index 4e3833bd62ae9c06ba3c25563b49ee48de47c067..99914892b4292500fabf2200e9643ffb63390f2f 100644
Binary files a/example-server/target/classes/github/javaguide/NettyServerMain.class and b/example-server/target/classes/github/javaguide/NettyServerMain.class differ
diff --git a/pom.xml b/pom.xml
index b1880ef1cc80384eec98e8aa8e6ca60a510879e7..d65a630c971133271eecb7f1b70f57eea1d52003 100644
--- a/pom.xml
+++ b/pom.xml
@@ -15,8 +15,11 @@
2.9.0
1.7.25
+
4.1.42.Final
4.0.2
+
+ 29.0-jre
rpc-framework-core
diff --git a/rpc-framework-common/pom.xml b/rpc-framework-common/pom.xml
index cb798ae700a928728ad37612a9590df1b09d0cd2..54fc89b821c2d4b5071deaf547812bdcb4914614 100644
--- a/rpc-framework-common/pom.xml
+++ b/rpc-framework-common/pom.xml
@@ -11,5 +11,13 @@
rpc-framework-common
+
+
+
+ com.google.guava
+ guava
+ ${guava.version}
+
+
diff --git a/rpc-framework-common/src/main/java/github/javaguide/utils/concurrent/ThreadPoolFactory.java b/rpc-framework-common/src/main/java/github/javaguide/utils/concurrent/ThreadPoolFactory.java
new file mode 100644
index 0000000000000000000000000000000000000000..01bbe410818aa09ed7fb6abd90f0c736efeee802
--- /dev/null
+++ b/rpc-framework-common/src/main/java/github/javaguide/utils/concurrent/ThreadPoolFactory.java
@@ -0,0 +1,63 @@
+package github.javaguide.utils.concurrent;
+
+import com.google.common.util.concurrent.ThreadFactoryBuilder;
+
+import java.util.concurrent.ArrayBlockingQueue;
+import java.util.concurrent.BlockingQueue;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.ThreadFactory;
+import java.util.concurrent.ThreadPoolExecutor;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * 创建 ThreadPool(线程池) 的工具类.
+ *
+ * @author shuang.kou
+ * @createTime 2020年05月26日 16:00:00
+ */
+public class ThreadPoolFactory {
+ /**
+ * 线程池参数
+ */
+ private static final int CORE_POOL_SIZE = 10;
+ private static final int MAXIMUM_POOL_SIZE_SIZE = 100;
+ private static final int KEEP_ALIVE_TIME = 1;
+ private static final int BLOCKING_QUEUE_CAPACITY = 100;
+
+ private ThreadPoolFactory() {
+
+ }
+
+ public static ExecutorService createDefaultThreadPool(String threadNamePrefix) {
+ return createDefaultThreadPool(threadNamePrefix, false);
+ }
+
+ public static ExecutorService createDefaultThreadPool(String threadNamePrefix, Boolean daemon) {
+ // 使用有界队列
+ BlockingQueue workQueue = new ArrayBlockingQueue<>(BLOCKING_QUEUE_CAPACITY);
+ ThreadFactory threadFactory = createThreadFactory(threadNamePrefix, daemon);
+ return new ThreadPoolExecutor(CORE_POOL_SIZE, MAXIMUM_POOL_SIZE_SIZE, KEEP_ALIVE_TIME, TimeUnit.MINUTES, workQueue, threadFactory);
+ }
+
+
+ /**
+ * 创建 ThreadFactory 。如果threadNamePrefix不为空则使用自建ThreadFactory,否则使用defaultThreadFactory
+ *
+ * @param threadNamePrefix 作为创建的线程名字的前缀
+ * @param daemon 指定是否为 Daemon Thread(守护线程)
+ * @return ThreadFactory
+ */
+ private static ThreadFactory createThreadFactory(String threadNamePrefix, Boolean daemon) {
+ if (threadNamePrefix != null) {
+ if (daemon != null) {
+ return new ThreadFactoryBuilder().setNameFormat(threadNamePrefix + "-%d").setDaemon(daemon).build();
+ } else {
+ return new ThreadFactoryBuilder().setNameFormat(threadNamePrefix + "-%d").build();
+ }
+ }
+
+ return Executors.defaultThreadFactory();
+ }
+
+}
diff --git a/rpc-framework-common/target/classes/github/javaguide/utils/concurrent/ThreadPoolFactory.class b/rpc-framework-common/target/classes/github/javaguide/utils/concurrent/ThreadPoolFactory.class
new file mode 100644
index 0000000000000000000000000000000000000000..fd46af41f6a8b0c3e71ffffc177e220fd2761c9d
Binary files /dev/null and b/rpc-framework-common/target/classes/github/javaguide/utils/concurrent/ThreadPoolFactory.class differ