├── MyRPCFromZero.iml
├── target
└── classes
│ ├── log4j.properties
│ └── com
│ └── ganghuan
│ ├── myRPCVersion0
│ ├── common
│ │ ├── User.class
│ │ └── User$UserBuilder.class
│ ├── client
│ │ └── RPCClient.class
│ ├── server
│ │ ├── RPCServer.class
│ │ └── UserServiceImpl.class
│ └── service
│ │ └── UserService.class
│ ├── myRPCVersion1
│ ├── common
│ │ ├── User.class
│ │ ├── RPCRequest.class
│ │ ├── RPCResponse.class
│ │ ├── User$UserBuilder.class
│ │ ├── RPCRequest$RPCRequestBuilder.class
│ │ └── RPCResponse$RPCResponseBuilder.class
│ ├── client
│ │ ├── IOClient.class
│ │ ├── ClientProxy.class
│ │ └── RPCClient.class
│ ├── server
│ │ ├── RPCServer.class
│ │ └── UserServiceImpl.class
│ └── service
│ │ └── UserService.class
│ ├── myRPCVersion2
│ ├── common
│ │ ├── Blog.class
│ │ ├── User.class
│ │ ├── RPCRequest.class
│ │ ├── RPCResponse.class
│ │ ├── Blog$BlogBuilder.class
│ │ ├── User$UserBuilder.class
│ │ ├── RPCRequest$RPCRequestBuilder.class
│ │ └── RPCResponse$RPCResponseBuilder.class
│ ├── client
│ │ ├── IOClient.class
│ │ ├── RPCClient.class
│ │ └── RPCClientProxy.class
│ ├── server
│ │ ├── RPCServer.class
│ │ ├── TestServer.class
│ │ ├── WorkThread.class
│ │ ├── BlogServiceImpl.class
│ │ ├── ServiceProvider.class
│ │ ├── UserServiceImpl.class
│ │ ├── SimpleRPCRPCServer.class
│ │ └── ThreadPoolRPCRPCServer.class
│ └── service
│ │ ├── BlogService.class
│ │ └── UserService.class
│ ├── myRPCVersion3
│ ├── common
│ │ ├── Blog.class
│ │ ├── User.class
│ │ ├── RPCRequest.class
│ │ ├── RPCResponse.class
│ │ ├── Blog$BlogBuilder.class
│ │ ├── User$UserBuilder.class
│ │ ├── RPCRequest$RPCRequestBuilder.class
│ │ └── RPCResponse$RPCResponseBuilder.class
│ ├── client
│ │ ├── RPCClient.class
│ │ ├── TestClient.class
│ │ ├── NettyRPCClient.class
│ │ ├── RPCClientProxy.class
│ │ ├── SimpleRPCClient.class
│ │ ├── NettyClientHandler.class
│ │ ├── NettyClientInitializer.class
│ │ └── NettyClientInitializer$1.class
│ ├── server
│ │ ├── RPCServer.class
│ │ ├── TestServer.class
│ │ ├── WorkThread.class
│ │ ├── NettyRPCServer.class
│ │ ├── ServiceProvider.class
│ │ ├── SimpleRPCRPCServer.class
│ │ ├── NettyRPCServerHandler.class
│ │ ├── NettyServerInitializer.class
│ │ ├── ThreadPoolRPCRPCServer.class
│ │ └── NettyServerInitializer$1.class
│ └── service
│ │ ├── BlogService.class
│ │ ├── UserService.class
│ │ ├── BlogServiceImpl.class
│ │ └── UserServiceImpl.class
│ ├── myRPCVersion4
│ ├── common
│ │ ├── Blog.class
│ │ ├── User.class
│ │ ├── RPCRequest.class
│ │ ├── RPCResponse.class
│ │ ├── Blog$BlogBuilder.class
│ │ ├── User$UserBuilder.class
│ │ ├── RPCRequest$RPCRequestBuilder.class
│ │ └── RPCResponse$RPCResponseBuilder.class
│ ├── codec
│ │ ├── MyDecode.class
│ │ ├── MyEncode.class
│ │ ├── MessageType.class
│ │ ├── Serializer.class
│ │ ├── JsonSerializer.class
│ │ └── ObjectSerializer.class
│ ├── client
│ │ ├── RPCClient.class
│ │ ├── TestClient.class
│ │ ├── NettyRPCClient.class
│ │ ├── RPCClientProxy.class
│ │ ├── SimpleRPCClient.class
│ │ ├── NettyClientHandler.class
│ │ └── NettyClientInitializer.class
│ ├── server
│ │ ├── RPCServer.class
│ │ ├── TestServer.class
│ │ ├── WorkThread.class
│ │ ├── NettyRPCServer.class
│ │ ├── ServiceProvider.class
│ │ ├── SimpleRPCRPCServer.class
│ │ ├── NettyRPCServerHandler.class
│ │ ├── NettyServerInitializer.class
│ │ └── ThreadPoolRPCRPCServer.class
│ └── service
│ │ ├── BlogService.class
│ │ ├── UserService.class
│ │ ├── BlogServiceImpl.class
│ │ └── UserServiceImpl.class
│ ├── myRPCVersion5
│ ├── common
│ │ ├── Blog.class
│ │ ├── User.class
│ │ ├── RPCRequest.class
│ │ ├── RPCResponse.class
│ │ ├── Blog$BlogBuilder.class
│ │ ├── User$UserBuilder.class
│ │ ├── RPCRequest$RPCRequestBuilder.class
│ │ └── RPCResponse$RPCResponseBuilder.class
│ ├── codec
│ │ ├── MyDecode.class
│ │ ├── MyEncode.class
│ │ ├── MessageType.class
│ │ ├── Serializer.class
│ │ ├── JsonSerializer.class
│ │ └── ObjectSerializer.class
│ ├── client
│ │ ├── RPCClient.class
│ │ ├── TestClient.class
│ │ ├── NettyRPCClient.class
│ │ ├── RPCClientProxy.class
│ │ ├── SimpleRPCClient.class
│ │ ├── NettyClientHandler.class
│ │ └── NettyClientInitializer.class
│ ├── server
│ │ ├── RPCServer.class
│ │ ├── TestServer.class
│ │ ├── WorkThread.class
│ │ ├── NettyRPCServer.class
│ │ ├── ServiceProvider.class
│ │ ├── SimpleRPCRPCServer.class
│ │ ├── NettyRPCServerHandler.class
│ │ ├── NettyServerInitializer.class
│ │ └── ThreadPoolRPCRPCServer.class
│ ├── service
│ │ ├── BlogService.class
│ │ ├── UserService.class
│ │ ├── BlogServiceImpl.class
│ │ └── UserServiceImpl.class
│ └── register
│ │ ├── ServiceRegister.class
│ │ └── ZkServiceRegister.class
│ └── myRPCVersion6
│ ├── common
│ ├── Blog.class
│ ├── User.class
│ ├── RPCRequest.class
│ ├── RPCResponse.class
│ ├── Blog$BlogBuilder.class
│ ├── User$UserBuilder.class
│ ├── RPCRequest$RPCRequestBuilder.class
│ └── RPCResponse$RPCResponseBuilder.class
│ ├── codec
│ ├── MyDecode.class
│ ├── MyEncode.class
│ ├── MessageType.class
│ ├── Serializer.class
│ ├── JsonSerializer.class
│ └── ObjectSerializer.class
│ ├── client
│ ├── RPCClient.class
│ ├── TestClient.class
│ ├── NettyRPCClient.class
│ ├── RPCClientProxy.class
│ ├── SimpleRPCClient.class
│ ├── NettyClientHandler.class
│ └── NettyClientInitializer.class
│ ├── server
│ ├── RPCServer.class
│ ├── TestServer.class
│ ├── TestServer2.class
│ ├── WorkThread.class
│ ├── NettyRPCServer.class
│ ├── ServiceProvider.class
│ ├── SimpleRPCRPCServer.class
│ ├── NettyRPCServerHandler.class
│ ├── NettyServerInitializer.class
│ └── ThreadPoolRPCRPCServer.class
│ ├── service
│ ├── BlogService.class
│ ├── UserService.class
│ ├── BlogServiceImpl.class
│ └── UserServiceImpl.class
│ ├── loadbalance
│ ├── LoadBalance.class
│ ├── RoundLoadBalance.class
│ └── RandomLoadBalance.class
│ └── register
│ ├── ServiceRegister.class
│ └── ZkServiceRegister.class
├── src
└── main
│ ├── resources
│ └── log4j.properties
│ └── java
│ └── com
│ └── ganghuan
│ ├── myRPCVersion2
│ ├── server
│ │ ├── RPCServer.java
│ │ ├── BlogServiceImpl.java
│ │ ├── UserServiceImpl.java
│ │ ├── ServiceProvider.java
│ │ ├── TestServer.java
│ │ ├── SimpleRPCRPCServer.java
│ │ └── ThreadPoolRPCRPCServer.java
│ ├── service
│ │ ├── BlogService.java
│ │ └── UserService.java
│ ├── common
│ │ ├── Blog.java
│ │ ├── User.java
│ │ ├── RPCRequest.java
│ │ └── RPCResponse.java
│ └── client
│ │ ├── RPCClient.java
│ │ ├── IOClient.java
│ │ └── RPCClientProxy.java
│ ├── myRPCVersion3
│ ├── server
│ │ ├── RPCServer.java
│ │ ├── ServiceProvider.java
│ │ ├── TestServer.java
│ │ ├── SimpleRPCRPCServer.java
│ │ ├── NettyRPCServer.java
│ │ ├── NettyServerInitializer.java
│ │ ├── ThreadPoolRPCRPCServer.java
│ │ ├── NettyRPCServerHandler.java
│ │ └── WorkThread.java
│ ├── service
│ │ ├── BlogService.java
│ │ ├── UserService.java
│ │ ├── BlogServiceImpl.java
│ │ └── UserServiceImpl.java
│ ├── client
│ │ ├── RPCClient.java
│ │ ├── NettyClientHandler.java
│ │ ├── RPCClientProxy.java
│ │ ├── TestClient.java
│ │ ├── NettyClientInitializer.java
│ │ ├── SimpleRPCClient.java
│ │ └── NettyRPCClient.java
│ └── common
│ │ ├── Blog.java
│ │ ├── User.java
│ │ ├── RPCRequest.java
│ │ └── RPCResponse.java
│ ├── myRPCVersion4
│ ├── server
│ │ ├── RPCServer.java
│ │ ├── TestServer.java
│ │ ├── ServiceProvider.java
│ │ ├── SimpleRPCRPCServer.java
│ │ ├── NettyServerInitializer.java
│ │ ├── NettyRPCServer.java
│ │ ├── ThreadPoolRPCRPCServer.java
│ │ ├── NettyRPCServerHandler.java
│ │ └── WorkThread.java
│ ├── service
│ │ ├── BlogService.java
│ │ ├── UserService.java
│ │ ├── BlogServiceImpl.java
│ │ └── UserServiceImpl.java
│ ├── client
│ │ ├── RPCClient.java
│ │ ├── NettyClientHandler.java
│ │ ├── NettyClientInitializer.java
│ │ ├── RPCClientProxy.java
│ │ ├── TestClient.java
│ │ ├── SimpleRPCClient.java
│ │ └── NettyRPCClient.java
│ ├── codec
│ │ ├── MessageType.java
│ │ ├── Serializer.java
│ │ ├── MyEncode.java
│ │ ├── ObjectSerializer.java
│ │ └── MyDecode.java
│ └── common
│ │ ├── Blog.java
│ │ ├── User.java
│ │ ├── RPCRequest.java
│ │ └── RPCResponse.java
│ ├── myRPCVersion5
│ ├── server
│ │ ├── RPCServer.java
│ │ ├── TestServer.java
│ │ ├── NettyServerInitializer.java
│ │ ├── SimpleRPCRPCServer.java
│ │ ├── ServiceProvider.java
│ │ ├── NettyRPCServer.java
│ │ ├── ThreadPoolRPCRPCServer.java
│ │ └── NettyRPCServerHandler.java
│ ├── service
│ │ ├── BlogService.java
│ │ ├── UserService.java
│ │ ├── BlogServiceImpl.java
│ │ └── UserServiceImpl.java
│ ├── client
│ │ ├── RPCClient.java
│ │ ├── NettyClientHandler.java
│ │ ├── NettyClientInitializer.java
│ │ ├── RPCClientProxy.java
│ │ ├── TestClient.java
│ │ └── SimpleRPCClient.java
│ ├── codec
│ │ ├── MessageType.java
│ │ ├── Serializer.java
│ │ ├── MyEncode.java
│ │ ├── ObjectSerializer.java
│ │ └── MyDecode.java
│ ├── register
│ │ └── ServiceRegister.java
│ └── common
│ │ ├── Blog.java
│ │ ├── User.java
│ │ ├── RPCRequest.java
│ │ └── RPCResponse.java
│ ├── myRPCVersion6
│ ├── server
│ │ ├── RPCServer.java
│ │ ├── TestServer.java
│ │ ├── TestServer2.java
│ │ ├── NettyServerInitializer.java
│ │ ├── SimpleRPCRPCServer.java
│ │ ├── ServiceProvider.java
│ │ ├── NettyRPCServer.java
│ │ ├── ThreadPoolRPCRPCServer.java
│ │ └── NettyRPCServerHandler.java
│ ├── service
│ │ ├── BlogService.java
│ │ ├── UserService.java
│ │ ├── BlogServiceImpl.java
│ │ └── UserServiceImpl.java
│ ├── loadbalance
│ │ ├── LoadBalance.java
│ │ ├── RoundLoadBalance.java
│ │ └── RandomLoadBalance.java
│ ├── client
│ │ ├── RPCClient.java
│ │ ├── NettyClientHandler.java
│ │ ├── NettyClientInitializer.java
│ │ ├── RPCClientProxy.java
│ │ ├── TestClient.java
│ │ └── SimpleRPCClient.java
│ ├── codec
│ │ ├── MessageType.java
│ │ ├── Serializer.java
│ │ ├── MyEncode.java
│ │ ├── ObjectSerializer.java
│ │ └── MyDecode.java
│ ├── register
│ │ └── ServiceRegister.java
│ └── common
│ │ ├── Blog.java
│ │ ├── User.java
│ │ ├── RPCRequest.java
│ │ └── RPCResponse.java
│ ├── myRPCVersion0
│ ├── service
│ │ └── UserService.java
│ ├── common
│ │ └── User.java
│ ├── server
│ │ ├── UserServiceImpl.java
│ │ └── RPCServer.java
│ └── client
│ │ └── RPCClient.java
│ └── myRPCVersion1
│ ├── service
│ └── UserService.java
│ ├── common
│ ├── User.java
│ ├── RPCRequest.java
│ └── RPCResponse.java
│ ├── client
│ ├── RPCClient.java
│ ├── IOClient.java
│ └── ClientProxy.java
│ └── server
│ ├── UserServiceImpl.java
│ └── RPCServer.java
├── .idea
├── vcs.xml
├── .gitignore
├── misc.xml
├── compiler.xml
└── jarRepositories.xml
└── pom.xml
/MyRPCFromZero.iml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/target/classes/log4j.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/log4j.properties
--------------------------------------------------------------------------------
/src/main/resources/log4j.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/src/main/resources/log4j.properties
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion0/common/User.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion0/common/User.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion1/common/User.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion1/common/User.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion2/common/Blog.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion2/common/Blog.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion2/common/User.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion2/common/User.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion3/common/Blog.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion3/common/Blog.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion3/common/User.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion3/common/User.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion4/common/Blog.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion4/common/Blog.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion4/common/User.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion4/common/User.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion5/common/Blog.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion5/common/Blog.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion5/common/User.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion5/common/User.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion6/common/Blog.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion6/common/Blog.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion6/common/User.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion6/common/User.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion1/client/IOClient.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion1/client/IOClient.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion2/client/IOClient.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion2/client/IOClient.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion4/codec/MyDecode.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion4/codec/MyDecode.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion4/codec/MyEncode.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion4/codec/MyEncode.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion5/codec/MyDecode.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion5/codec/MyDecode.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion5/codec/MyEncode.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion5/codec/MyEncode.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion6/codec/MyDecode.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion6/codec/MyDecode.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion6/codec/MyEncode.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion6/codec/MyEncode.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion0/client/RPCClient.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion0/client/RPCClient.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion0/server/RPCServer.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion0/server/RPCServer.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion1/client/ClientProxy.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion1/client/ClientProxy.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion1/client/RPCClient.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion1/client/RPCClient.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion1/common/RPCRequest.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion1/common/RPCRequest.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion1/common/RPCResponse.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion1/common/RPCResponse.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion1/server/RPCServer.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion1/server/RPCServer.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion2/client/RPCClient.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion2/client/RPCClient.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion2/common/RPCRequest.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion2/common/RPCRequest.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion2/common/RPCResponse.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion2/common/RPCResponse.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion2/server/RPCServer.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion2/server/RPCServer.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion2/server/TestServer.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion2/server/TestServer.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion2/server/WorkThread.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion2/server/WorkThread.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion3/client/RPCClient.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion3/client/RPCClient.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion3/client/TestClient.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion3/client/TestClient.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion3/common/RPCRequest.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion3/common/RPCRequest.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion3/common/RPCResponse.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion3/common/RPCResponse.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion3/server/RPCServer.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion3/server/RPCServer.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion3/server/TestServer.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion3/server/TestServer.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion3/server/WorkThread.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion3/server/WorkThread.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion4/client/RPCClient.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion4/client/RPCClient.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion4/client/TestClient.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion4/client/TestClient.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion4/codec/MessageType.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion4/codec/MessageType.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion4/codec/Serializer.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion4/codec/Serializer.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion4/common/RPCRequest.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion4/common/RPCRequest.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion4/common/RPCResponse.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion4/common/RPCResponse.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion4/server/RPCServer.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion4/server/RPCServer.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion4/server/TestServer.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion4/server/TestServer.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion4/server/WorkThread.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion4/server/WorkThread.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion5/client/RPCClient.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion5/client/RPCClient.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion5/client/TestClient.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion5/client/TestClient.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion5/codec/MessageType.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion5/codec/MessageType.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion5/codec/Serializer.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion5/codec/Serializer.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion5/common/RPCRequest.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion5/common/RPCRequest.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion5/common/RPCResponse.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion5/common/RPCResponse.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion5/server/RPCServer.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion5/server/RPCServer.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion5/server/TestServer.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion5/server/TestServer.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion5/server/WorkThread.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion5/server/WorkThread.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion6/client/RPCClient.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion6/client/RPCClient.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion6/client/TestClient.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion6/client/TestClient.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion6/codec/MessageType.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion6/codec/MessageType.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion6/codec/Serializer.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion6/codec/Serializer.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion6/common/RPCRequest.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion6/common/RPCRequest.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion6/common/RPCResponse.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion6/common/RPCResponse.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion6/server/RPCServer.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion6/server/RPCServer.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion6/server/TestServer.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion6/server/TestServer.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion6/server/TestServer2.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion6/server/TestServer2.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion6/server/WorkThread.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion6/server/WorkThread.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion0/service/UserService.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion0/service/UserService.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion1/service/UserService.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion1/service/UserService.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion2/service/BlogService.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion2/service/BlogService.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion2/service/UserService.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion2/service/UserService.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion3/service/BlogService.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion3/service/BlogService.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion3/service/UserService.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion3/service/UserService.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion4/codec/JsonSerializer.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion4/codec/JsonSerializer.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion4/service/BlogService.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion4/service/BlogService.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion4/service/UserService.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion4/service/UserService.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion5/codec/JsonSerializer.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion5/codec/JsonSerializer.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion5/service/BlogService.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion5/service/BlogService.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion5/service/UserService.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion5/service/UserService.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion6/codec/JsonSerializer.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion6/codec/JsonSerializer.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion6/service/BlogService.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion6/service/BlogService.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion6/service/UserService.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion6/service/UserService.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion0/common/User$UserBuilder.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion0/common/User$UserBuilder.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion0/server/UserServiceImpl.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion0/server/UserServiceImpl.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion1/common/User$UserBuilder.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion1/common/User$UserBuilder.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion1/server/UserServiceImpl.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion1/server/UserServiceImpl.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion2/client/RPCClientProxy.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion2/client/RPCClientProxy.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion2/common/Blog$BlogBuilder.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion2/common/Blog$BlogBuilder.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion2/common/User$UserBuilder.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion2/common/User$UserBuilder.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion2/server/BlogServiceImpl.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion2/server/BlogServiceImpl.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion2/server/ServiceProvider.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion2/server/ServiceProvider.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion2/server/UserServiceImpl.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion2/server/UserServiceImpl.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion3/client/NettyRPCClient.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion3/client/NettyRPCClient.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion3/client/RPCClientProxy.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion3/client/RPCClientProxy.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion3/client/SimpleRPCClient.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion3/client/SimpleRPCClient.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion3/common/Blog$BlogBuilder.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion3/common/Blog$BlogBuilder.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion3/common/User$UserBuilder.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion3/common/User$UserBuilder.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion3/server/NettyRPCServer.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion3/server/NettyRPCServer.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion3/server/ServiceProvider.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion3/server/ServiceProvider.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion3/service/BlogServiceImpl.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion3/service/BlogServiceImpl.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion3/service/UserServiceImpl.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion3/service/UserServiceImpl.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion4/client/NettyRPCClient.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion4/client/NettyRPCClient.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion4/client/RPCClientProxy.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion4/client/RPCClientProxy.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion4/client/SimpleRPCClient.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion4/client/SimpleRPCClient.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion4/codec/ObjectSerializer.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion4/codec/ObjectSerializer.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion4/common/Blog$BlogBuilder.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion4/common/Blog$BlogBuilder.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion4/common/User$UserBuilder.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion4/common/User$UserBuilder.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion4/server/NettyRPCServer.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion4/server/NettyRPCServer.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion4/server/ServiceProvider.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion4/server/ServiceProvider.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion4/service/BlogServiceImpl.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion4/service/BlogServiceImpl.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion4/service/UserServiceImpl.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion4/service/UserServiceImpl.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion5/client/NettyRPCClient.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion5/client/NettyRPCClient.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion5/client/RPCClientProxy.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion5/client/RPCClientProxy.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion5/client/SimpleRPCClient.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion5/client/SimpleRPCClient.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion5/codec/ObjectSerializer.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion5/codec/ObjectSerializer.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion5/common/Blog$BlogBuilder.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion5/common/Blog$BlogBuilder.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion5/common/User$UserBuilder.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion5/common/User$UserBuilder.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion5/server/NettyRPCServer.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion5/server/NettyRPCServer.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion5/server/ServiceProvider.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion5/server/ServiceProvider.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion5/service/BlogServiceImpl.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion5/service/BlogServiceImpl.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion5/service/UserServiceImpl.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion5/service/UserServiceImpl.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion6/client/NettyRPCClient.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion6/client/NettyRPCClient.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion6/client/RPCClientProxy.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion6/client/RPCClientProxy.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion6/client/SimpleRPCClient.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion6/client/SimpleRPCClient.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion6/codec/ObjectSerializer.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion6/codec/ObjectSerializer.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion6/common/Blog$BlogBuilder.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion6/common/Blog$BlogBuilder.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion6/common/User$UserBuilder.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion6/common/User$UserBuilder.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion6/loadbalance/LoadBalance.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion6/loadbalance/LoadBalance.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion6/server/NettyRPCServer.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion6/server/NettyRPCServer.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion6/server/ServiceProvider.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion6/server/ServiceProvider.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion6/service/BlogServiceImpl.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion6/service/BlogServiceImpl.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion6/service/UserServiceImpl.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion6/service/UserServiceImpl.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion2/server/SimpleRPCRPCServer.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion2/server/SimpleRPCRPCServer.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion3/client/NettyClientHandler.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion3/client/NettyClientHandler.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion3/server/SimpleRPCRPCServer.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion3/server/SimpleRPCRPCServer.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion4/client/NettyClientHandler.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion4/client/NettyClientHandler.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion4/server/SimpleRPCRPCServer.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion4/server/SimpleRPCRPCServer.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion5/client/NettyClientHandler.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion5/client/NettyClientHandler.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion5/register/ServiceRegister.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion5/register/ServiceRegister.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion5/server/SimpleRPCRPCServer.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion5/server/SimpleRPCRPCServer.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion6/client/NettyClientHandler.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion6/client/NettyClientHandler.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion6/register/ServiceRegister.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion6/register/ServiceRegister.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion6/server/SimpleRPCRPCServer.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion6/server/SimpleRPCRPCServer.class
--------------------------------------------------------------------------------
/src/main/java/com/ganghuan/myRPCVersion2/server/RPCServer.java:
--------------------------------------------------------------------------------
1 | package com.ganghuan.myRPCVersion2.server;
2 |
3 | public interface RPCServer {
4 | void start(int port);
5 | void stop();
6 | }
7 |
--------------------------------------------------------------------------------
/src/main/java/com/ganghuan/myRPCVersion3/server/RPCServer.java:
--------------------------------------------------------------------------------
1 | package com.ganghuan.myRPCVersion3.server;
2 |
3 | public interface RPCServer {
4 | void start(int port);
5 | void stop();
6 | }
7 |
--------------------------------------------------------------------------------
/src/main/java/com/ganghuan/myRPCVersion4/server/RPCServer.java:
--------------------------------------------------------------------------------
1 | package com.ganghuan.myRPCVersion4.server;
2 |
3 | public interface RPCServer {
4 | void start(int port);
5 | void stop();
6 | }
7 |
--------------------------------------------------------------------------------
/src/main/java/com/ganghuan/myRPCVersion5/server/RPCServer.java:
--------------------------------------------------------------------------------
1 | package com.ganghuan.myRPCVersion5.server;
2 |
3 | public interface RPCServer {
4 | void start(int port);
5 | void stop();
6 | }
7 |
--------------------------------------------------------------------------------
/src/main/java/com/ganghuan/myRPCVersion6/server/RPCServer.java:
--------------------------------------------------------------------------------
1 | package com.ganghuan.myRPCVersion6.server;
2 |
3 | public interface RPCServer {
4 | void start(int port);
5 | void stop();
6 | }
7 |
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion3/server/NettyRPCServerHandler.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion3/server/NettyRPCServerHandler.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion4/server/NettyRPCServerHandler.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion4/server/NettyRPCServerHandler.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion5/register/ZkServiceRegister.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion5/register/ZkServiceRegister.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion5/server/NettyRPCServerHandler.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion5/server/NettyRPCServerHandler.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion6/loadbalance/RoundLoadBalance.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion6/loadbalance/RoundLoadBalance.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion6/register/ZkServiceRegister.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion6/register/ZkServiceRegister.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion6/server/NettyRPCServerHandler.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion6/server/NettyRPCServerHandler.class
--------------------------------------------------------------------------------
/.idea/vcs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion2/server/ThreadPoolRPCRPCServer.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion2/server/ThreadPoolRPCRPCServer.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion3/client/NettyClientInitializer.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion3/client/NettyClientInitializer.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion3/server/NettyServerInitializer.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion3/server/NettyServerInitializer.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion3/server/ThreadPoolRPCRPCServer.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion3/server/ThreadPoolRPCRPCServer.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion4/client/NettyClientInitializer.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion4/client/NettyClientInitializer.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion4/server/NettyServerInitializer.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion4/server/NettyServerInitializer.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion4/server/ThreadPoolRPCRPCServer.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion4/server/ThreadPoolRPCRPCServer.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion5/client/NettyClientInitializer.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion5/client/NettyClientInitializer.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion5/server/NettyServerInitializer.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion5/server/NettyServerInitializer.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion5/server/ThreadPoolRPCRPCServer.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion5/server/ThreadPoolRPCRPCServer.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion6/client/NettyClientInitializer.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion6/client/NettyClientInitializer.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion6/loadbalance/RandomLoadBalance.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion6/loadbalance/RandomLoadBalance.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion6/server/NettyServerInitializer.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion6/server/NettyServerInitializer.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion6/server/ThreadPoolRPCRPCServer.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion6/server/ThreadPoolRPCRPCServer.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion3/client/NettyClientInitializer$1.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion3/client/NettyClientInitializer$1.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion3/server/NettyServerInitializer$1.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion3/server/NettyServerInitializer$1.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion1/common/RPCRequest$RPCRequestBuilder.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion1/common/RPCRequest$RPCRequestBuilder.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion2/common/RPCRequest$RPCRequestBuilder.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion2/common/RPCRequest$RPCRequestBuilder.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion3/common/RPCRequest$RPCRequestBuilder.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion3/common/RPCRequest$RPCRequestBuilder.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion4/common/RPCRequest$RPCRequestBuilder.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion4/common/RPCRequest$RPCRequestBuilder.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion5/common/RPCRequest$RPCRequestBuilder.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion5/common/RPCRequest$RPCRequestBuilder.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion6/common/RPCRequest$RPCRequestBuilder.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion6/common/RPCRequest$RPCRequestBuilder.class
--------------------------------------------------------------------------------
/.idea/.gitignore:
--------------------------------------------------------------------------------
1 | # Default ignored files
2 | /shelf/
3 | /workspace.xml
4 | # Datasource local storage ignored files
5 | /dataSources/
6 | /dataSources.local.xml
7 | # Editor-based HTTP Client requests
8 | /httpRequests/
9 |
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion1/common/RPCResponse$RPCResponseBuilder.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion1/common/RPCResponse$RPCResponseBuilder.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion2/common/RPCResponse$RPCResponseBuilder.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion2/common/RPCResponse$RPCResponseBuilder.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion3/common/RPCResponse$RPCResponseBuilder.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion3/common/RPCResponse$RPCResponseBuilder.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion4/common/RPCResponse$RPCResponseBuilder.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion4/common/RPCResponse$RPCResponseBuilder.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion5/common/RPCResponse$RPCResponseBuilder.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion5/common/RPCResponse$RPCResponseBuilder.class
--------------------------------------------------------------------------------
/target/classes/com/ganghuan/myRPCVersion6/common/RPCResponse$RPCResponseBuilder.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/he2121/MyRPCFromZero/HEAD/target/classes/com/ganghuan/myRPCVersion6/common/RPCResponse$RPCResponseBuilder.class
--------------------------------------------------------------------------------
/src/main/java/com/ganghuan/myRPCVersion2/service/BlogService.java:
--------------------------------------------------------------------------------
1 | package com.ganghuan.myRPCVersion2.service;
2 |
3 |
4 | import com.ganghuan.myRPCVersion2.common.Blog;
5 |
6 | public interface BlogService {
7 | Blog getBlogById(Integer id);
8 | }
9 |
--------------------------------------------------------------------------------
/src/main/java/com/ganghuan/myRPCVersion3/service/BlogService.java:
--------------------------------------------------------------------------------
1 | package com.ganghuan.myRPCVersion3.service;
2 |
3 |
4 | import com.ganghuan.myRPCVersion3.common.Blog;
5 |
6 | public interface BlogService {
7 | Blog getBlogById(Integer id);
8 | }
9 |
--------------------------------------------------------------------------------
/src/main/java/com/ganghuan/myRPCVersion4/service/BlogService.java:
--------------------------------------------------------------------------------
1 | package com.ganghuan.myRPCVersion4.service;
2 |
3 |
4 | import com.ganghuan.myRPCVersion4.common.Blog;
5 |
6 | public interface BlogService {
7 | Blog getBlogById(Integer id);
8 | }
9 |
--------------------------------------------------------------------------------
/src/main/java/com/ganghuan/myRPCVersion5/service/BlogService.java:
--------------------------------------------------------------------------------
1 | package com.ganghuan.myRPCVersion5.service;
2 |
3 |
4 | import com.ganghuan.myRPCVersion5.common.Blog;
5 |
6 | public interface BlogService {
7 | Blog getBlogById(Integer id);
8 | }
9 |
--------------------------------------------------------------------------------
/src/main/java/com/ganghuan/myRPCVersion6/service/BlogService.java:
--------------------------------------------------------------------------------
1 | package com.ganghuan.myRPCVersion6.service;
2 |
3 |
4 | import com.ganghuan.myRPCVersion6.common.Blog;
5 |
6 | public interface BlogService {
7 | Blog getBlogById(Integer id);
8 | }
9 |
--------------------------------------------------------------------------------
/src/main/java/com/ganghuan/myRPCVersion0/service/UserService.java:
--------------------------------------------------------------------------------
1 | package com.ganghuan.myRPCVersion0.service;
2 |
3 |
4 | import com.ganghuan.myRPCVersion0.common.User;
5 |
6 | public interface UserService {
7 | // 客户端通过这个接口调用服务端的实现类
8 | User getUserByUserId(Integer id);
9 | }
10 |
--------------------------------------------------------------------------------
/src/main/java/com/ganghuan/myRPCVersion6/loadbalance/LoadBalance.java:
--------------------------------------------------------------------------------
1 | package com.ganghuan.myRPCVersion6.loadbalance;
2 |
3 | import java.util.List;
4 |
5 | /**
6 | * 给服务器地址列表,根据不同的负载均衡策略选择一个
7 | */
8 | public interface LoadBalance {
9 | String balance(List addressList);
10 | }
--------------------------------------------------------------------------------
/src/main/java/com/ganghuan/myRPCVersion3/client/RPCClient.java:
--------------------------------------------------------------------------------
1 | package com.ganghuan.myRPCVersion3.client;
2 |
3 |
4 | import com.ganghuan.myRPCVersion3.common.RPCRequest;
5 | import com.ganghuan.myRPCVersion3.common.RPCResponse;
6 |
7 | public interface RPCClient {
8 | RPCResponse sendRequest(RPCRequest request);
9 | }
10 |
--------------------------------------------------------------------------------
/src/main/java/com/ganghuan/myRPCVersion4/client/RPCClient.java:
--------------------------------------------------------------------------------
1 | package com.ganghuan.myRPCVersion4.client;
2 |
3 |
4 | import com.ganghuan.myRPCVersion4.common.RPCRequest;
5 | import com.ganghuan.myRPCVersion4.common.RPCResponse;
6 |
7 | public interface RPCClient {
8 | RPCResponse sendRequest(RPCRequest request);
9 | }
10 |
--------------------------------------------------------------------------------
/src/main/java/com/ganghuan/myRPCVersion5/client/RPCClient.java:
--------------------------------------------------------------------------------
1 | package com.ganghuan.myRPCVersion5.client;
2 |
3 |
4 | import com.ganghuan.myRPCVersion5.common.RPCRequest;
5 | import com.ganghuan.myRPCVersion5.common.RPCResponse;
6 |
7 | public interface RPCClient {
8 | RPCResponse sendRequest(RPCRequest request);
9 | }
10 |
--------------------------------------------------------------------------------
/src/main/java/com/ganghuan/myRPCVersion6/client/RPCClient.java:
--------------------------------------------------------------------------------
1 | package com.ganghuan.myRPCVersion6.client;
2 |
3 |
4 | import com.ganghuan.myRPCVersion6.common.RPCRequest;
5 | import com.ganghuan.myRPCVersion6.common.RPCResponse;
6 |
7 | public interface RPCClient {
8 | RPCResponse sendRequest(RPCRequest request);
9 | }
10 |
--------------------------------------------------------------------------------
/src/main/java/com/ganghuan/myRPCVersion2/service/UserService.java:
--------------------------------------------------------------------------------
1 | package com.ganghuan.myRPCVersion2.service;
2 |
3 |
4 | import com.ganghuan.myRPCVersion2.common.User;
5 |
6 | public interface UserService {
7 | // 客户端通过这个接口调用服务端的实现类
8 | User getUserByUserId(Integer id);
9 |
10 | Integer insertUserId(User user);
11 | }
12 |
--------------------------------------------------------------------------------
/src/main/java/com/ganghuan/myRPCVersion3/service/UserService.java:
--------------------------------------------------------------------------------
1 | package com.ganghuan.myRPCVersion3.service;
2 |
3 |
4 | import com.ganghuan.myRPCVersion3.common.User;
5 |
6 | public interface UserService {
7 | // 客户端通过这个接口调用服务端的实现类
8 | User getUserByUserId(Integer id);
9 |
10 | Integer insertUserId(User user);
11 | }
12 |
--------------------------------------------------------------------------------
/src/main/java/com/ganghuan/myRPCVersion4/service/UserService.java:
--------------------------------------------------------------------------------
1 | package com.ganghuan.myRPCVersion4.service;
2 |
3 |
4 | import com.ganghuan.myRPCVersion4.common.User;
5 |
6 | public interface UserService {
7 | // 客户端通过这个接口调用服务端的实现类
8 | User getUserByUserId(Integer id);
9 |
10 | Integer insertUserId(User user);
11 | }
12 |
--------------------------------------------------------------------------------
/src/main/java/com/ganghuan/myRPCVersion5/service/UserService.java:
--------------------------------------------------------------------------------
1 | package com.ganghuan.myRPCVersion5.service;
2 |
3 |
4 | import com.ganghuan.myRPCVersion5.common.User;
5 |
6 | public interface UserService {
7 | // 客户端通过这个接口调用服务端的实现类
8 | User getUserByUserId(Integer id);
9 |
10 | Integer insertUserId(User user);
11 | }
12 |
--------------------------------------------------------------------------------
/src/main/java/com/ganghuan/myRPCVersion4/codec/MessageType.java:
--------------------------------------------------------------------------------
1 | package com.ganghuan.myRPCVersion4.codec;
2 |
3 | import lombok.AllArgsConstructor;
4 |
5 | @AllArgsConstructor
6 | public enum MessageType {
7 | REQUEST(0),RESPONSE(1);
8 | private int code;
9 | public int getCode() {
10 | return code;
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/src/main/java/com/ganghuan/myRPCVersion5/codec/MessageType.java:
--------------------------------------------------------------------------------
1 | package com.ganghuan.myRPCVersion5.codec;
2 |
3 | import lombok.AllArgsConstructor;
4 |
5 | @AllArgsConstructor
6 | public enum MessageType {
7 | REQUEST(0),RESPONSE(1);
8 | private int code;
9 | public int getCode() {
10 | return code;
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/src/main/java/com/ganghuan/myRPCVersion6/codec/MessageType.java:
--------------------------------------------------------------------------------
1 | package com.ganghuan.myRPCVersion6.codec;
2 |
3 | import lombok.AllArgsConstructor;
4 |
5 | @AllArgsConstructor
6 | public enum MessageType {
7 | REQUEST(0),RESPONSE(1);
8 | private int code;
9 | public int getCode() {
10 | return code;
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/src/main/java/com/ganghuan/myRPCVersion1/service/UserService.java:
--------------------------------------------------------------------------------
1 | package com.ganghuan.myRPCVersion1.service;
2 |
3 |
4 | import com.ganghuan.myRPCVersion1.common.User;
5 |
6 | public interface UserService {
7 | // 客户端通过这个接口调用服务端的实现类
8 | User getUserByUserId(Integer id);
9 | // 给这个服务增加一个功能
10 | Integer insertUserId(User user);
11 | }
12 |
--------------------------------------------------------------------------------
/src/main/java/com/ganghuan/myRPCVersion6/service/UserService.java:
--------------------------------------------------------------------------------
1 | package com.ganghuan.myRPCVersion6.service;
2 |
3 |
4 | import com.ganghuan.myRPCVersion6.common.User;
5 |
6 | public interface UserService {
7 | // 客户端通过这个接口调用服务端的实现类
8 | User getUserByUserId(Integer id);
9 |
10 | Integer insertUserId(User user);
11 |
12 | String hello();
13 | }
14 |
--------------------------------------------------------------------------------
/src/main/java/com/ganghuan/myRPCVersion5/register/ServiceRegister.java:
--------------------------------------------------------------------------------
1 | package com.ganghuan.myRPCVersion5.register;
2 |
3 | import java.net.InetSocketAddress;
4 |
5 | // 服务注册接口,两大基本功能,注册:保存服务与地址。 查询:根据服务名查找地址
6 | public interface ServiceRegister {
7 | void register(String serviceName, InetSocketAddress serverAddress);
8 | InetSocketAddress serviceDiscovery(String serviceName);
9 | }
10 |
--------------------------------------------------------------------------------
/src/main/java/com/ganghuan/myRPCVersion6/register/ServiceRegister.java:
--------------------------------------------------------------------------------
1 | package com.ganghuan.myRPCVersion6.register;
2 |
3 | import java.net.InetSocketAddress;
4 |
5 | // 服务注册接口,两大基本功能,注册:保存服务与地址。 查询:根据服务名查找地址
6 | public interface ServiceRegister {
7 | void register(String serviceName, InetSocketAddress serverAddress);
8 | InetSocketAddress serviceDiscovery(String serviceName);
9 | }
10 |
--------------------------------------------------------------------------------
/src/main/java/com/ganghuan/myRPCVersion4/service/BlogServiceImpl.java:
--------------------------------------------------------------------------------
1 | package com.ganghuan.myRPCVersion4.service;
2 |
3 |
4 | import com.ganghuan.myRPCVersion4.common.Blog;
5 |
6 | public class BlogServiceImpl implements BlogService {
7 | @Override
8 | public Blog getBlogById(Integer id) {
9 | Blog blog = Blog.builder().id(id).title("我的博客").useId(22).build();
10 | System.out.println("客户端查询了"+id+"博客");
11 | return blog;
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/src/main/java/com/ganghuan/myRPCVersion5/service/BlogServiceImpl.java:
--------------------------------------------------------------------------------
1 | package com.ganghuan.myRPCVersion5.service;
2 |
3 |
4 | import com.ganghuan.myRPCVersion5.common.Blog;
5 |
6 | public class BlogServiceImpl implements BlogService {
7 | @Override
8 | public Blog getBlogById(Integer id) {
9 | Blog blog = Blog.builder().id(id).title("我的博客").useId(22).build();
10 | System.out.println("客户端查询了"+id+"博客");
11 | return blog;
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/src/main/java/com/ganghuan/myRPCVersion6/service/BlogServiceImpl.java:
--------------------------------------------------------------------------------
1 | package com.ganghuan.myRPCVersion6.service;
2 |
3 |
4 | import com.ganghuan.myRPCVersion6.common.Blog;
5 |
6 | public class BlogServiceImpl implements BlogService {
7 | @Override
8 | public Blog getBlogById(Integer id) {
9 | Blog blog = Blog.builder().id(id).title("我的博客").useId(22).build();
10 | System.out.println("客户端查询了"+id+"博客");
11 | return blog;
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/src/main/java/com/ganghuan/myRPCVersion6/loadbalance/RoundLoadBalance.java:
--------------------------------------------------------------------------------
1 | package com.ganghuan.myRPCVersion6.loadbalance;
2 |
3 | import java.util.List;
4 |
5 | /**
6 | * 轮询负载均衡
7 | */
8 | public class RoundLoadBalance implements LoadBalance{
9 | private int choose = -1;
10 | @Override
11 | public String balance(List addressList) {
12 | choose++;
13 | choose = choose%addressList.size();
14 | return addressList.get(choose);
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/src/main/java/com/ganghuan/myRPCVersion2/common/Blog.java:
--------------------------------------------------------------------------------
1 | package com.ganghuan.myRPCVersion2.common;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Builder;
5 | import lombok.Data;
6 | import lombok.NoArgsConstructor;
7 |
8 | import java.io.Serializable;
9 |
10 | @Data
11 | @Builder
12 | @NoArgsConstructor
13 | @AllArgsConstructor
14 | public class Blog implements Serializable {
15 | private Integer id;
16 | private Integer useId;
17 | private String title;
18 | }
19 |
--------------------------------------------------------------------------------
/src/main/java/com/ganghuan/myRPCVersion3/common/Blog.java:
--------------------------------------------------------------------------------
1 | package com.ganghuan.myRPCVersion3.common;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Builder;
5 | import lombok.Data;
6 | import lombok.NoArgsConstructor;
7 |
8 | import java.io.Serializable;
9 |
10 | @Data
11 | @Builder
12 | @NoArgsConstructor
13 | @AllArgsConstructor
14 | public class Blog implements Serializable {
15 | private Integer id;
16 | private Integer useId;
17 | private String title;
18 | }
19 |
--------------------------------------------------------------------------------
/src/main/java/com/ganghuan/myRPCVersion4/common/Blog.java:
--------------------------------------------------------------------------------
1 | package com.ganghuan.myRPCVersion4.common;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Builder;
5 | import lombok.Data;
6 | import lombok.NoArgsConstructor;
7 |
8 | import java.io.Serializable;
9 |
10 | @Data
11 | @Builder
12 | @NoArgsConstructor
13 | @AllArgsConstructor
14 | public class Blog implements Serializable {
15 | private Integer id;
16 | private Integer useId;
17 | private String title;
18 | }
19 |
--------------------------------------------------------------------------------
/src/main/java/com/ganghuan/myRPCVersion5/common/Blog.java:
--------------------------------------------------------------------------------
1 | package com.ganghuan.myRPCVersion5.common;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Builder;
5 | import lombok.Data;
6 | import lombok.NoArgsConstructor;
7 |
8 | import java.io.Serializable;
9 |
10 | @Data
11 | @Builder
12 | @NoArgsConstructor
13 | @AllArgsConstructor
14 | public class Blog implements Serializable {
15 | private Integer id;
16 | private Integer useId;
17 | private String title;
18 | }
19 |
--------------------------------------------------------------------------------
/src/main/java/com/ganghuan/myRPCVersion6/common/Blog.java:
--------------------------------------------------------------------------------
1 | package com.ganghuan.myRPCVersion6.common;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Builder;
5 | import lombok.Data;
6 | import lombok.NoArgsConstructor;
7 |
8 | import java.io.Serializable;
9 |
10 | @Data
11 | @Builder
12 | @NoArgsConstructor
13 | @AllArgsConstructor
14 | public class Blog implements Serializable {
15 | private Integer id;
16 | private Integer useId;
17 | private String title;
18 | }
19 |
--------------------------------------------------------------------------------
/src/main/java/com/ganghuan/myRPCVersion0/common/User.java:
--------------------------------------------------------------------------------
1 | package com.ganghuan.myRPCVersion0.common;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Builder;
5 | import lombok.Data;
6 | import lombok.NoArgsConstructor;
7 |
8 | import java.io.Serializable;
9 |
10 | @Builder
11 | @Data
12 | @NoArgsConstructor
13 | @AllArgsConstructor
14 | public class User implements Serializable {
15 | // 客户端和服务端共有的
16 | private Integer id;
17 | private String userName;
18 | private Boolean sex;
19 | }
20 |
--------------------------------------------------------------------------------
/src/main/java/com/ganghuan/myRPCVersion1/common/User.java:
--------------------------------------------------------------------------------
1 | package com.ganghuan.myRPCVersion1.common;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Builder;
5 | import lombok.Data;
6 | import lombok.NoArgsConstructor;
7 |
8 | import java.io.Serializable;
9 |
10 | @Builder
11 | @Data
12 | @NoArgsConstructor
13 | @AllArgsConstructor
14 | public class User implements Serializable {
15 | // 客户端和服务端共有的
16 | private Integer id;
17 | private String userName;
18 | private Boolean sex;
19 | }
20 |
--------------------------------------------------------------------------------
/src/main/java/com/ganghuan/myRPCVersion2/common/User.java:
--------------------------------------------------------------------------------
1 | package com.ganghuan.myRPCVersion2.common;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Builder;
5 | import lombok.Data;
6 | import lombok.NoArgsConstructor;
7 |
8 | import java.io.Serializable;
9 |
10 | @Data
11 | @Builder
12 | @NoArgsConstructor
13 | @AllArgsConstructor
14 | public class User implements Serializable {
15 | // 客户端和服务端共有的,模拟RPC中传输的信息
16 | private Integer id;
17 | private String userName;
18 | private Boolean sex;
19 | }
20 |
--------------------------------------------------------------------------------
/src/main/java/com/ganghuan/myRPCVersion2/server/BlogServiceImpl.java:
--------------------------------------------------------------------------------
1 | package com.ganghuan.myRPCVersion2.server;
2 |
3 |
4 | import com.ganghuan.myRPCVersion2.common.Blog;
5 | import com.ganghuan.myRPCVersion2.service.BlogService;
6 |
7 | public class BlogServiceImpl implements BlogService {
8 | @Override
9 | public Blog getBlogById(Integer id) {
10 | Blog blog = Blog.builder().id(id).title("我的博客").useId(22).build();
11 | System.out.println("客户端查询了"+id+"博客");
12 | return blog;
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/src/main/java/com/ganghuan/myRPCVersion3/common/User.java:
--------------------------------------------------------------------------------
1 | package com.ganghuan.myRPCVersion3.common;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Builder;
5 | import lombok.Data;
6 | import lombok.NoArgsConstructor;
7 |
8 | import java.io.Serializable;
9 |
10 | @Data
11 | @Builder
12 | @NoArgsConstructor
13 | @AllArgsConstructor
14 | public class User implements Serializable {
15 | // 客户端和服务端共有的,模拟RPC中传输的信息
16 | private Integer id;
17 | private String userName;
18 | private Boolean sex;
19 | }
20 |
--------------------------------------------------------------------------------
/src/main/java/com/ganghuan/myRPCVersion4/common/User.java:
--------------------------------------------------------------------------------
1 | package com.ganghuan.myRPCVersion4.common;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Builder;
5 | import lombok.Data;
6 | import lombok.NoArgsConstructor;
7 |
8 | import java.io.Serializable;
9 |
10 | @Data
11 | @Builder
12 | @NoArgsConstructor
13 | @AllArgsConstructor
14 | public class User implements Serializable {
15 | // 客户端和服务端共有的,模拟RPC中传输的信息
16 | private Integer id;
17 | private String userName;
18 | private Boolean sex;
19 | }
20 |
--------------------------------------------------------------------------------
/src/main/java/com/ganghuan/myRPCVersion5/common/User.java:
--------------------------------------------------------------------------------
1 | package com.ganghuan.myRPCVersion5.common;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Builder;
5 | import lombok.Data;
6 | import lombok.NoArgsConstructor;
7 |
8 | import java.io.Serializable;
9 |
10 | @Data
11 | @Builder
12 | @NoArgsConstructor
13 | @AllArgsConstructor
14 | public class User implements Serializable {
15 | // 客户端和服务端共有的,模拟RPC中传输的信息
16 | private Integer id;
17 | private String userName;
18 | private Boolean sex;
19 | }
20 |
--------------------------------------------------------------------------------
/src/main/java/com/ganghuan/myRPCVersion6/common/User.java:
--------------------------------------------------------------------------------
1 | package com.ganghuan.myRPCVersion6.common;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Builder;
5 | import lombok.Data;
6 | import lombok.NoArgsConstructor;
7 |
8 | import java.io.Serializable;
9 |
10 | @Data
11 | @Builder
12 | @NoArgsConstructor
13 | @AllArgsConstructor
14 | public class User implements Serializable {
15 | // 客户端和服务端共有的,模拟RPC中传输的信息
16 | private Integer id;
17 | private String userName;
18 | private Boolean sex;
19 | }
20 |
--------------------------------------------------------------------------------
/src/main/java/com/ganghuan/myRPCVersion3/service/BlogServiceImpl.java:
--------------------------------------------------------------------------------
1 | package com.ganghuan.myRPCVersion3.service;
2 |
3 |
4 | import com.ganghuan.myRPCVersion3.common.Blog;
5 | import com.ganghuan.myRPCVersion3.service.BlogService;
6 |
7 | public class BlogServiceImpl implements BlogService {
8 | @Override
9 | public Blog getBlogById(Integer id) {
10 | Blog blog = Blog.builder().id(id).title("我的博客").useId(22).build();
11 | System.out.println("客户端查询了"+id+"博客");
12 | return blog;
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/.idea/misc.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/src/main/java/com/ganghuan/myRPCVersion6/loadbalance/RandomLoadBalance.java:
--------------------------------------------------------------------------------
1 | package com.ganghuan.myRPCVersion6.loadbalance;
2 |
3 | import java.util.List;
4 | import java.util.Random;
5 |
6 | /**
7 | * 随机负载均衡
8 | */
9 | public class RandomLoadBalance implements LoadBalance{
10 | @Override
11 | public String balance(List addressList) {
12 |
13 | Random random = new Random();
14 | int choose = random.nextInt(addressList.size());
15 | System.out.println("负载均衡选择了" + choose + "服务器");
16 | return addressList.get(choose);
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/src/main/java/com/ganghuan/myRPCVersion4/service/UserServiceImpl.java:
--------------------------------------------------------------------------------
1 | package com.ganghuan.myRPCVersion4.service;
2 |
3 |
4 | import com.ganghuan.myRPCVersion4.common.User;
5 |
6 | public class UserServiceImpl implements UserService {
7 | @Override
8 | public User getUserByUserId(Integer id) {
9 | // 模拟从数据库中取用户的行为
10 | User user = User.builder().id(id).userName("he2121").sex(true).build();
11 | System.out.println("客户端查询了"+id+"用户");
12 | return user;
13 | }
14 |
15 | @Override
16 | public Integer insertUserId(User user) {
17 | System.out.println("插入数据成功:"+user);
18 | return 1;
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/src/main/java/com/ganghuan/myRPCVersion5/service/UserServiceImpl.java:
--------------------------------------------------------------------------------
1 | package com.ganghuan.myRPCVersion5.service;
2 |
3 |
4 | import com.ganghuan.myRPCVersion5.common.User;
5 |
6 | public class UserServiceImpl implements UserService {
7 | @Override
8 | public User getUserByUserId(Integer id) {
9 | // 模拟从数据库中取用户的行为
10 | User user = User.builder().id(id).userName("he2121").sex(true).build();
11 | System.out.println("客户端查询了"+id+"用户");
12 | return user;
13 | }
14 |
15 | @Override
16 | public Integer insertUserId(User user) {
17 | System.out.println("插入数据成功:"+user);
18 | return 1;
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/.idea/compiler.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/src/main/java/com/ganghuan/myRPCVersion2/common/RPCRequest.java:
--------------------------------------------------------------------------------
1 | package com.ganghuan.myRPCVersion2.common;
2 |
3 | import lombok.Builder;
4 | import lombok.Data;
5 |
6 | import java.io.Serializable;
7 |
8 | /**
9 | * 在上个例子中,我们的Request仅仅只发送了一个id参数过去,这显然是不合理的,
10 | * 因为服务端不会只有一个服务一个方法,因此不会知道调用那个方法
11 | * 因此一个RPC请求中,client发送应该是需要调用的Service接口名,方法名,参数,参数类型
12 | * 这样服务端就能根据这些信息根据反射调用相应的方法
13 | */
14 | @Data
15 | @Builder
16 | public class RPCRequest implements Serializable {
17 | // 服务类名,客户端只知道接口名,在服务端中用接口名指向实现类
18 | private String interfaceName;
19 | // 方法名
20 | private String methodName;
21 | // 参数列表
22 | private Object[] params;
23 | // 参数类型
24 | private Class>[] paramsTypes;
25 | }
26 |
--------------------------------------------------------------------------------
/src/main/java/com/ganghuan/myRPCVersion2/server/UserServiceImpl.java:
--------------------------------------------------------------------------------
1 | package com.ganghuan.myRPCVersion2.server;
2 |
3 |
4 | import com.ganghuan.myRPCVersion2.common.User;
5 | import com.ganghuan.myRPCVersion2.service.UserService;
6 |
7 | public class UserServiceImpl implements UserService {
8 | @Override
9 | public User getUserByUserId(Integer id) {
10 | // 模拟从数据库中取用户的行为
11 | User user = User.builder().id(id).userName("he2121").sex(true).build();
12 | System.out.println("客户端查询了"+id+"用户");
13 | return user;
14 | }
15 |
16 | @Override
17 | public Integer insertUserId(User user) {
18 | System.out.println("插入数据成功:"+user);
19 | return 1;
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/src/main/java/com/ganghuan/myRPCVersion3/common/RPCRequest.java:
--------------------------------------------------------------------------------
1 | package com.ganghuan.myRPCVersion3.common;
2 |
3 | import lombok.Builder;
4 | import lombok.Data;
5 |
6 | import java.io.Serializable;
7 |
8 | /**
9 | * 在上个例子中,我们的Request仅仅只发送了一个id参数过去,这显然是不合理的,
10 | * 因为服务端不会只有一个服务一个方法,因此不会知道调用那个方法
11 | * 因此一个RPC请求中,client发送应该是需要调用的Service接口名,方法名,参数,参数类型
12 | * 这样服务端就能根据这些信息根据反射调用相应的方法
13 | */
14 | @Data
15 | @Builder
16 | public class RPCRequest implements Serializable {
17 | // 服务类名,客户端只知道接口名,在服务端中用接口名指向实现类
18 | private String interfaceName;
19 | // 方法名
20 | private String methodName;
21 | // 参数列表
22 | private Object[] params;
23 | // 参数类型
24 | private Class>[] paramsTypes;
25 | }
26 |
--------------------------------------------------------------------------------
/src/main/java/com/ganghuan/myRPCVersion3/service/UserServiceImpl.java:
--------------------------------------------------------------------------------
1 | package com.ganghuan.myRPCVersion3.service;
2 |
3 |
4 | import com.ganghuan.myRPCVersion3.common.User;
5 | import com.ganghuan.myRPCVersion3.service.UserService;
6 |
7 | public class UserServiceImpl implements UserService {
8 | @Override
9 | public User getUserByUserId(Integer id) {
10 | // 模拟从数据库中取用户的行为
11 | User user = User.builder().id(id).userName("he2121").sex(true).build();
12 | System.out.println("客户端查询了"+id+"用户");
13 | return user;
14 | }
15 |
16 | @Override
17 | public Integer insertUserId(User user) {
18 | System.out.println("插入数据成功:"+user);
19 | return 1;
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/src/main/java/com/ganghuan/myRPCVersion0/server/UserServiceImpl.java:
--------------------------------------------------------------------------------
1 | package com.ganghuan.myRPCVersion0.server;
2 |
3 | import com.ganghuan.myRPCVersion0.common.User;
4 | import com.ganghuan.myRPCVersion0.service.UserService;
5 |
6 | import java.util.Random;
7 | import java.util.UUID;
8 |
9 | public class UserServiceImpl implements UserService {
10 | @Override
11 | public User getUserByUserId(Integer id) {
12 | System.out.println("客户端查询了"+id+"的用户");
13 | // 模拟从数据库中取用户的行为
14 | Random random = new Random();
15 | User user = User.builder().userName(UUID.randomUUID().toString())
16 | .id(id)
17 | .sex(random.nextBoolean()).build();
18 | return user;
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/src/main/java/com/ganghuan/myRPCVersion1/common/RPCRequest.java:
--------------------------------------------------------------------------------
1 | package com.ganghuan.myRPCVersion1.common;
2 |
3 | import lombok.Builder;
4 | import lombok.Data;
5 |
6 | import java.io.Serializable;
7 |
8 | /**
9 | * 在上个例子中,我们的Request仅仅只发送了一个id参数过去,这显然是不合理的,
10 | * 因为服务端不会只有一个服务一个方法,因此只传递参数服务端不会知道调用那个方法
11 | * 因此一个RPC请求中,client发送应该是需要调用的Service接口名,方法名,参数,参数类型
12 | * 这样服务端就能根据这些信息根据反射调用相应的方法
13 | * 使用java自带的序列化方式(实现接口)
14 | */
15 | @Data
16 | @Builder
17 | public class RPCRequest implements Serializable {
18 | // 服务类名,客户端只知道接口名,在服务端中用接口名指向实现类
19 | private String interfaceName;
20 | // 方法名
21 | private String methodName;
22 | // 参数列表
23 | private Object[] params;
24 | // 参数类型
25 | private Class>[] paramsTypes;
26 | }
27 |
--------------------------------------------------------------------------------
/src/main/java/com/ganghuan/myRPCVersion6/service/UserServiceImpl.java:
--------------------------------------------------------------------------------
1 | package com.ganghuan.myRPCVersion6.service;
2 |
3 |
4 | import com.ganghuan.myRPCVersion6.common.User;
5 |
6 | public class UserServiceImpl implements UserService {
7 | @Override
8 | public User getUserByUserId(Integer id) {
9 | // 模拟从数据库中取用户的行为
10 | User user = User.builder().id(id).userName("he2121").sex(true).build();
11 | System.out.println("客户端查询了"+id+"用户");
12 | return user;
13 | }
14 |
15 | @Override
16 | public Integer insertUserId(User user) {
17 | System.out.println("插入数据成功:"+user);
18 | return 1;
19 | }
20 |
21 | @Override
22 | public String hello() {
23 | return "Hello World!";
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/src/main/java/com/ganghuan/myRPCVersion4/common/RPCRequest.java:
--------------------------------------------------------------------------------
1 | package com.ganghuan.myRPCVersion4.common;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Builder;
5 | import lombok.Data;
6 |
7 | import java.io.Serializable;
8 |
9 | /**
10 | * 在上个例子中,我们的Request仅仅只发送了一个id参数过去,这显然是不合理的,
11 | * 因为服务端不会只有一个服务一个方法,因此不会知道调用那个方法
12 | * 因此一个RPC请求中,client发送应该是需要调用的Service接口名,方法名,参数,参数类型
13 | * 这样服务端就能根据这些信息根据反射调用相应的方法
14 | */
15 | @Data
16 | @Builder
17 | @AllArgsConstructor
18 | public class RPCRequest implements Serializable {
19 | // 服务类名,客户端只知道接口名,在服务端中用接口名指向实现类
20 | private String interfaceName;
21 | // 方法名
22 | private String methodName;
23 | // 参数列表
24 | private Object[] params;
25 | // 参数类型
26 | private Class>[] paramsTypes;
27 | }
28 |
--------------------------------------------------------------------------------
/src/main/java/com/ganghuan/myRPCVersion5/common/RPCRequest.java:
--------------------------------------------------------------------------------
1 | package com.ganghuan.myRPCVersion5.common;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Builder;
5 | import lombok.Data;
6 |
7 | import java.io.Serializable;
8 |
9 | /**
10 | * 在上个例子中,我们的Request仅仅只发送了一个id参数过去,这显然是不合理的,
11 | * 因为服务端不会只有一个服务一个方法,因此不会知道调用那个方法
12 | * 因此一个RPC请求中,client发送应该是需要调用的Service接口名,方法名,参数,参数类型
13 | * 这样服务端就能根据这些信息根据反射调用相应的方法
14 | */
15 | @Data
16 | @Builder
17 | @AllArgsConstructor
18 | public class RPCRequest implements Serializable {
19 | // 服务类名,客户端只知道接口名,在服务端中用接口名指向实现类
20 | private String interfaceName;
21 | // 方法名
22 | private String methodName;
23 | // 参数列表
24 | private Object[] params;
25 | // 参数类型
26 | private Class>[] paramsTypes;
27 | }
28 |
--------------------------------------------------------------------------------
/src/main/java/com/ganghuan/myRPCVersion6/common/RPCRequest.java:
--------------------------------------------------------------------------------
1 | package com.ganghuan.myRPCVersion6.common;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Builder;
5 | import lombok.Data;
6 |
7 | import java.io.Serializable;
8 |
9 | /**
10 | * 在上个例子中,我们的Request仅仅只发送了一个id参数过去,这显然是不合理的,
11 | * 因为服务端不会只有一个服务一个方法,因此不会知道调用那个方法
12 | * 因此一个RPC请求中,client发送应该是需要调用的Service接口名,方法名,参数,参数类型
13 | * 这样服务端就能根据这些信息根据反射调用相应的方法
14 | */
15 | @Data
16 | @Builder
17 | @AllArgsConstructor
18 | public class RPCRequest implements Serializable {
19 | // 服务类名,客户端只知道接口名,在服务端中用接口名指向实现类
20 | private String interfaceName;
21 | // 方法名
22 | private String methodName;
23 | // 参数列表
24 | private Object[] params;
25 | // 参数类型
26 | private Class>[] paramsTypes;
27 | }
28 |
--------------------------------------------------------------------------------
/src/main/java/com/ganghuan/myRPCVersion1/client/RPCClient.java:
--------------------------------------------------------------------------------
1 | package com.ganghuan.myRPCVersion1.client;
2 |
3 | import com.ganghuan.myRPCVersion1.common.User;
4 | import com.ganghuan.myRPCVersion1.service.UserService;
5 |
6 | public class RPCClient {
7 | public static void main(String[] args) {
8 |
9 | ClientProxy clientProxy = new ClientProxy("127.0.0.1", 8899);
10 | UserService proxy = clientProxy.getProxy(UserService.class);
11 |
12 | // 服务的方法1
13 | User userByUserId = proxy.getUserByUserId(10);
14 | System.out.println("从服务端得到的user为:" + userByUserId);
15 | // 服务的方法2
16 | User user = User.builder().userName("张三").id(100).sex(true).build();
17 | Integer integer = proxy.insertUserId(user);
18 | System.out.println("向服务端插入数据:"+integer);
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/src/main/java/com/ganghuan/myRPCVersion2/common/RPCResponse.java:
--------------------------------------------------------------------------------
1 | package com.ganghuan.myRPCVersion2.common;
2 |
3 |
4 |
5 | import lombok.Builder;
6 | import lombok.Data;
7 |
8 | import java.io.Serializable;
9 |
10 | /**
11 | * 上个例子中response传输的是User对象,显然在一个应用中我们不可能只传输一种类型的对象
12 | * 由此需要传输对象抽象成为Object
13 | * Rpc需要经过网络传输,有可能失败,类似于http,引入状态码和状态信息表示服务调用成功还是失败
14 | */
15 | @Data
16 | @Builder
17 | public class RPCResponse implements Serializable {
18 |
19 | private int code;
20 | private String message;
21 |
22 | private Object data;
23 |
24 | public static RPCResponse success(Object data) {
25 | return RPCResponse.builder().code(200).data(data).build();
26 | }
27 | public static RPCResponse fail() {
28 | return RPCResponse.builder().code(500).message("服务器发生错误").build();
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/src/main/java/com/ganghuan/myRPCVersion3/common/RPCResponse.java:
--------------------------------------------------------------------------------
1 | package com.ganghuan.myRPCVersion3.common;
2 |
3 |
4 |
5 | import lombok.Builder;
6 | import lombok.Data;
7 |
8 | import java.io.Serializable;
9 |
10 | /**
11 | * 上个例子中response传输的是User对象,显然在一个应用中我们不可能只传输一种类型的对象
12 | * 由此需要传输对象抽象成为Object
13 | * Rpc需要经过网络传输,有可能失败,类似于http,引入状态码和状态信息表示服务调用成功还是失败
14 | */
15 | @Data
16 | @Builder
17 | public class RPCResponse implements Serializable {
18 |
19 | private int code;
20 | private String message;
21 |
22 | private Object data;
23 |
24 | public static RPCResponse success(Object data) {
25 | return RPCResponse.builder().code(200).data(data).build();
26 | }
27 | public static RPCResponse fail() {
28 | return RPCResponse.builder().code(500).message("服务器发生错误").build();
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/src/main/java/com/ganghuan/myRPCVersion4/codec/Serializer.java:
--------------------------------------------------------------------------------
1 | package com.ganghuan.myRPCVersion4.codec;
2 |
3 |
4 | public interface Serializer {
5 | // 把对象序列化成字节数组
6 | byte[] serialize(Object obj);
7 | // 从字节数组反序列化成消息, 使用java自带序列化方式不用messageType也能得到相应的对象(序列化字节数组里包含类信息)
8 | // 其它方式需指定消息格式,再根据message转化成相应的对象
9 | Object deserialize(byte[] bytes, int messageType);
10 | // 返回使用的序列器,是哪个
11 | // 0:java自带序列化方式, 1: json序列化方式
12 | int getType();
13 | // 根据序号取出序列化器,暂时有两种实现方式,需要其它方式,实现这个接口即可
14 | static Serializer getSerializerByCode(int code){
15 | switch (code){
16 | case 0:
17 | return new ObjectSerializer();
18 | case 1:
19 | return new JsonSerializer();
20 | default:
21 | return null;
22 | }
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/src/main/java/com/ganghuan/myRPCVersion5/codec/Serializer.java:
--------------------------------------------------------------------------------
1 | package com.ganghuan.myRPCVersion5.codec;
2 |
3 |
4 | public interface Serializer {
5 | // 把对象序列化成字节数组
6 | byte[] serialize(Object obj);
7 | // 从字节数组反序列化成消息, 使用java自带序列化方式不用messageType也能得到相应的对象(序列化字节数组里包含类信息)
8 | // 其它方式需指定消息格式,再根据message转化成相应的对象
9 | Object deserialize(byte[] bytes, int messageType);
10 | // 返回使用的序列器,是哪个
11 | // 0:java自带序列化方式, 1: json序列化方式
12 | int getType();
13 | // 根据序号取出序列化器,暂时有两种实现方式,需要其它方式,实现这个接口即可
14 | static Serializer getSerializerByCode(int code){
15 | switch (code){
16 | case 0:
17 | return new ObjectSerializer();
18 | case 1:
19 | return new JsonSerializer();
20 | default:
21 | return null;
22 | }
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/src/main/java/com/ganghuan/myRPCVersion6/codec/Serializer.java:
--------------------------------------------------------------------------------
1 | package com.ganghuan.myRPCVersion6.codec;
2 |
3 |
4 | public interface Serializer {
5 | // 把对象序列化成字节数组
6 | byte[] serialize(Object obj);
7 | // 从字节数组反序列化成消息, 使用java自带序列化方式不用messageType也能得到相应的对象(序列化字节数组里包含类信息)
8 | // 其它方式需指定消息格式,再根据message转化成相应的对象
9 | Object deserialize(byte[] bytes, int messageType);
10 | // 返回使用的序列器,是哪个
11 | // 0:java自带序列化方式, 1: json序列化方式
12 | int getType();
13 | // 根据序号取出序列化器,暂时有两种实现方式,需要其它方式,实现这个接口即可
14 | static Serializer getSerializerByCode(int code){
15 | switch (code){
16 | case 0:
17 | return new ObjectSerializer();
18 | case 1:
19 | return new JsonSerializer();
20 | default:
21 | return null;
22 | }
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/src/main/java/com/ganghuan/myRPCVersion1/common/RPCResponse.java:
--------------------------------------------------------------------------------
1 | package com.ganghuan.myRPCVersion1.common;
2 |
3 |
4 |
5 | import lombok.Builder;
6 | import lombok.Data;
7 |
8 | import java.io.Serializable;
9 |
10 | /**
11 | * 上个例子中response传输的是User对象,显然在一个应用中我们不可能只传输一种类型的数据
12 | * 由此我们将传输对象抽象成为Object
13 | * Rpc需要经过网络传输,有可能失败,类似于http,引入状态码和状态信息表示服务调用成功还是失败
14 | */
15 | @Data
16 | @Builder
17 | public class RPCResponse implements Serializable {
18 | // 状态信息
19 | private int code;
20 | private String message;
21 | // 具体数据
22 | private Object data;
23 |
24 | public static RPCResponse success(Object data) {
25 | return RPCResponse.builder().code(200).data(data).build();
26 | }
27 | public static RPCResponse fail() {
28 | return RPCResponse.builder().code(500).message("服务器发生错误").build();
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/src/main/java/com/ganghuan/myRPCVersion1/server/UserServiceImpl.java:
--------------------------------------------------------------------------------
1 | package com.ganghuan.myRPCVersion1.server;
2 |
3 | import com.ganghuan.myRPCVersion1.common.User;
4 | import com.ganghuan.myRPCVersion1.service.UserService;
5 |
6 | import java.util.Random;
7 | import java.util.UUID;
8 |
9 | public class UserServiceImpl implements UserService {
10 | @Override
11 | public User getUserByUserId(Integer id) {
12 | System.out.println("客户端查询了"+id+"的用户");
13 | // 模拟从数据库中取用户的行为
14 | Random random = new Random();
15 | User user = User.builder().userName(UUID.randomUUID().toString())
16 | .id(id)
17 | .sex(random.nextBoolean()).build();
18 | return user;
19 | }
20 | @Override
21 | public Integer insertUserId(User user) {
22 | System.out.println("插入数据成功:"+user);
23 | return 1;
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/src/main/java/com/ganghuan/myRPCVersion4/server/TestServer.java:
--------------------------------------------------------------------------------
1 | package com.ganghuan.myRPCVersion4.server;
2 |
3 |
4 | import com.ganghuan.myRPCVersion4.service.BlogService;
5 | import com.ganghuan.myRPCVersion4.service.BlogServiceImpl;
6 | import com.ganghuan.myRPCVersion4.service.UserService;
7 | import com.ganghuan.myRPCVersion4.service.UserServiceImpl;
8 |
9 | public class TestServer {
10 | public static void main(String[] args) {
11 | UserService userService = new UserServiceImpl();
12 | BlogService blogService = new BlogServiceImpl();
13 |
14 | ServiceProvider serviceProvider = new ServiceProvider();
15 | serviceProvider.provideServiceInterface(userService);
16 | serviceProvider.provideServiceInterface(blogService);
17 |
18 | RPCServer RPCServer = new NettyRPCServer(serviceProvider);
19 | RPCServer.start(8899);
20 | }
21 | }
--------------------------------------------------------------------------------
/.idea/jarRepositories.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/src/main/java/com/ganghuan/myRPCVersion5/server/TestServer.java:
--------------------------------------------------------------------------------
1 | package com.ganghuan.myRPCVersion5.server;
2 |
3 |
4 | import com.ganghuan.myRPCVersion5.service.BlogService;
5 | import com.ganghuan.myRPCVersion5.service.BlogServiceImpl;
6 | import com.ganghuan.myRPCVersion5.service.UserService;
7 | import com.ganghuan.myRPCVersion5.service.UserServiceImpl;
8 |
9 | public class TestServer {
10 | public static void main(String[] args) {
11 | UserService userService = new UserServiceImpl();
12 | BlogService blogService = new BlogServiceImpl();
13 | // 这里重用了服务暴露类,顺便在注册中心注册,实际上应分开,每个类做各自独立的事
14 | ServiceProvider serviceProvider = new ServiceProvider("127.0.0.1", 8899);
15 | serviceProvider.provideServiceInterface(userService);
16 | serviceProvider.provideServiceInterface(blogService);
17 |
18 | RPCServer RPCServer = new NettyRPCServer(serviceProvider);
19 | RPCServer.start(8899);
20 | }
21 | }
--------------------------------------------------------------------------------
/src/main/java/com/ganghuan/myRPCVersion6/server/TestServer.java:
--------------------------------------------------------------------------------
1 | package com.ganghuan.myRPCVersion6.server;
2 |
3 |
4 | import com.ganghuan.myRPCVersion6.service.BlogService;
5 | import com.ganghuan.myRPCVersion6.service.BlogServiceImpl;
6 | import com.ganghuan.myRPCVersion6.service.UserService;
7 | import com.ganghuan.myRPCVersion6.service.UserServiceImpl;
8 |
9 | public class TestServer {
10 | public static void main(String[] args) {
11 | UserService userService = new UserServiceImpl();
12 | BlogService blogService = new BlogServiceImpl();
13 | // 这里重用了服务暴露类,顺便在注册中心注册,实际上应分开,每个类做各自独立的事
14 | ServiceProvider serviceProvider = new ServiceProvider("127.0.0.1", 8899);
15 | serviceProvider.provideServiceInterface(userService);
16 | serviceProvider.provideServiceInterface(blogService);
17 |
18 | RPCServer RPCServer = new NettyRPCServer(serviceProvider);
19 | RPCServer.start(8899);
20 | }
21 | }
--------------------------------------------------------------------------------
/src/main/java/com/ganghuan/myRPCVersion6/server/TestServer2.java:
--------------------------------------------------------------------------------
1 | package com.ganghuan.myRPCVersion6.server;
2 |
3 |
4 | import com.ganghuan.myRPCVersion6.service.BlogService;
5 | import com.ganghuan.myRPCVersion6.service.BlogServiceImpl;
6 | import com.ganghuan.myRPCVersion6.service.UserService;
7 | import com.ganghuan.myRPCVersion6.service.UserServiceImpl;
8 |
9 | public class TestServer2 {
10 | public static void main(String[] args) {
11 | UserService userService = new UserServiceImpl();
12 | BlogService blogService = new BlogServiceImpl();
13 |
14 | ServiceProvider serviceProvider = new ServiceProvider("127.0.0.1", 8900);
15 | // System.out.println("hahah");
16 | serviceProvider.provideServiceInterface(userService);
17 | serviceProvider.provideServiceInterface(blogService);
18 | RPCServer RPCServer = new NettyRPCServer(serviceProvider);
19 |
20 | RPCServer.start(8900);
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/src/main/java/com/ganghuan/myRPCVersion4/client/NettyClientHandler.java:
--------------------------------------------------------------------------------
1 | package com.ganghuan.myRPCVersion4.client;
2 |
3 | import com.ganghuan.myRPCVersion4.common.RPCResponse;
4 | import io.netty.channel.ChannelHandlerContext;
5 | import io.netty.channel.SimpleChannelInboundHandler;
6 | import io.netty.util.AttributeKey;
7 |
8 | public class NettyClientHandler extends SimpleChannelInboundHandler {
9 | @Override
10 | protected void channelRead0(ChannelHandlerContext ctx, RPCResponse msg) throws Exception {
11 | // 接收到response, 给channel设计别名,让sendRequest里读取response
12 | AttributeKey key = AttributeKey.valueOf("RPCResponse");
13 | ctx.channel().attr(key).set(msg);
14 | ctx.channel().close();
15 | }
16 |
17 | @Override
18 | public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
19 | cause.printStackTrace();
20 | ctx.close();
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/src/main/java/com/ganghuan/myRPCVersion5/client/NettyClientHandler.java:
--------------------------------------------------------------------------------
1 | package com.ganghuan.myRPCVersion5.client;
2 |
3 | import com.ganghuan.myRPCVersion5.common.RPCResponse;
4 | import io.netty.channel.ChannelHandlerContext;
5 | import io.netty.channel.SimpleChannelInboundHandler;
6 | import io.netty.util.AttributeKey;
7 |
8 | public class NettyClientHandler extends SimpleChannelInboundHandler {
9 | @Override
10 | protected void channelRead0(ChannelHandlerContext ctx, RPCResponse msg) throws Exception {
11 | // 接收到response, 给channel设计别名,让sendRequest里读取response
12 | AttributeKey key = AttributeKey.valueOf("RPCResponse");
13 | ctx.channel().attr(key).set(msg);
14 | ctx.channel().close();
15 | }
16 |
17 | @Override
18 | public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
19 | cause.printStackTrace();
20 | ctx.close();
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/src/main/java/com/ganghuan/myRPCVersion6/client/NettyClientHandler.java:
--------------------------------------------------------------------------------
1 | package com.ganghuan.myRPCVersion6.client;
2 |
3 | import com.ganghuan.myRPCVersion6.common.RPCResponse;
4 | import io.netty.channel.ChannelHandlerContext;
5 | import io.netty.channel.SimpleChannelInboundHandler;
6 | import io.netty.util.AttributeKey;
7 |
8 | public class NettyClientHandler extends SimpleChannelInboundHandler {
9 | @Override
10 | protected void channelRead0(ChannelHandlerContext ctx, RPCResponse msg) throws Exception {
11 | // 接收到response, 给channel设计别名,让sendRequest里读取response
12 | AttributeKey key = AttributeKey.valueOf("RPCResponse");
13 | ctx.channel().attr(key).set(msg);
14 | ctx.channel().close();
15 | }
16 |
17 | @Override
18 | public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
19 | cause.printStackTrace();
20 | ctx.close();
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/src/main/java/com/ganghuan/myRPCVersion5/client/NettyClientInitializer.java:
--------------------------------------------------------------------------------
1 | package com.ganghuan.myRPCVersion5.client;
2 |
3 | import com.ganghuan.myRPCVersion5.codec.JsonSerializer;
4 | import com.ganghuan.myRPCVersion5.codec.MyDecode;
5 | import com.ganghuan.myRPCVersion5.codec.MyEncode;
6 | import io.netty.channel.ChannelInitializer;
7 | import io.netty.channel.ChannelPipeline;
8 | import io.netty.channel.socket.SocketChannel;
9 |
10 | /**
11 | * 同样的与服务端解码和编码格式
12 | */
13 | public class NettyClientInitializer extends ChannelInitializer {
14 | @Override
15 | protected void initChannel(SocketChannel ch) throws Exception {
16 | ChannelPipeline pipeline = ch.pipeline();
17 | // 使用自定义的编解码器
18 | pipeline.addLast(new MyDecode());
19 | // 编码需要传入序列化器,这里是json,还支持ObjectSerializer,也可以自己实现其他的
20 | pipeline.addLast(new MyEncode(new JsonSerializer()));
21 | pipeline.addLast(new NettyClientHandler());
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/src/main/java/com/ganghuan/myRPCVersion6/client/NettyClientInitializer.java:
--------------------------------------------------------------------------------
1 | package com.ganghuan.myRPCVersion6.client;
2 |
3 | import com.ganghuan.myRPCVersion6.codec.JsonSerializer;
4 | import com.ganghuan.myRPCVersion6.codec.MyDecode;
5 | import com.ganghuan.myRPCVersion6.codec.MyEncode;
6 | import io.netty.channel.ChannelInitializer;
7 | import io.netty.channel.ChannelPipeline;
8 | import io.netty.channel.socket.SocketChannel;
9 |
10 | /**
11 | * 同样的与服务端解码和编码格式
12 | */
13 | public class NettyClientInitializer extends ChannelInitializer {
14 | @Override
15 | protected void initChannel(SocketChannel ch) throws Exception {
16 | ChannelPipeline pipeline = ch.pipeline();
17 | // 使用自定义的编解码器
18 | pipeline.addLast(new MyDecode());
19 | // 编码需要传入序列化器,这里是json,还支持ObjectSerializer,也可以自己实现其他的
20 | pipeline.addLast(new MyEncode(new JsonSerializer()));
21 | pipeline.addLast(new NettyClientHandler());
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/src/main/java/com/ganghuan/myRPCVersion2/server/ServiceProvider.java:
--------------------------------------------------------------------------------
1 | package com.ganghuan.myRPCVersion2.server;
2 |
3 |
4 |
5 | import java.util.HashMap;
6 | import java.util.HashSet;
7 | import java.util.Map;
8 | import java.util.Set;
9 |
10 | /**
11 | * 存放服务接口名与服务端对应的实现类
12 | * 服务启动时要暴露其相关的实现类
13 | * 根据request中的interface调用服务端中相关实现类
14 | */
15 | public class ServiceProvider {
16 | /**
17 | * 一个实现类可能实现多个接口
18 | */
19 | private Map interfaceProvider;
20 |
21 | public ServiceProvider(){
22 | this.interfaceProvider = new HashMap<>();
23 | }
24 |
25 | public void provideServiceInterface(Object service){
26 | Class>[] interfaces = service.getClass().getInterfaces();
27 |
28 | for(Class clazz : interfaces){
29 | interfaceProvider.put(clazz.getName(),service);
30 | }
31 |
32 | }
33 |
34 | public Object getService(String interfaceName){
35 | return interfaceProvider.get(interfaceName);
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/src/main/java/com/ganghuan/myRPCVersion3/server/ServiceProvider.java:
--------------------------------------------------------------------------------
1 | package com.ganghuan.myRPCVersion3.server;
2 |
3 |
4 |
5 | import java.util.HashMap;
6 | import java.util.HashSet;
7 | import java.util.Map;
8 | import java.util.Set;
9 |
10 | /**
11 | * 存放服务接口名与服务端对应的实现类
12 | * 服务启动时要暴露其相关的实现类
13 | * 根据request中的interface调用服务端中相关实现类
14 | */
15 | public class ServiceProvider {
16 | /**
17 | * 一个实现类可能实现多个接口
18 | */
19 | private Map interfaceProvider;
20 |
21 | public ServiceProvider(){
22 | this.interfaceProvider = new HashMap<>();
23 | }
24 |
25 | public void provideServiceInterface(Object service){
26 | Class>[] interfaces = service.getClass().getInterfaces();
27 |
28 | for(Class clazz : interfaces){
29 | interfaceProvider.put(clazz.getName(),service);
30 | }
31 |
32 | }
33 |
34 | public Object getService(String interfaceName){
35 | return interfaceProvider.get(interfaceName);
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/src/main/java/com/ganghuan/myRPCVersion4/server/ServiceProvider.java:
--------------------------------------------------------------------------------
1 | package com.ganghuan.myRPCVersion4.server;
2 |
3 |
4 |
5 | import java.util.HashMap;
6 | import java.util.HashSet;
7 | import java.util.Map;
8 | import java.util.Set;
9 |
10 | /**
11 | * 存放服务接口名与服务端对应的实现类
12 | * 服务启动时要暴露其相关的实现类
13 | * 根据request中的interface调用服务端中相关实现类
14 | */
15 | public class ServiceProvider {
16 | /**
17 | * 一个实现类可能实现多个服务接口,
18 | */
19 | private Map interfaceProvider;
20 |
21 | public ServiceProvider(){
22 | this.interfaceProvider = new HashMap<>();
23 | }
24 |
25 | public void provideServiceInterface(Object service){
26 | Class>[] interfaces = service.getClass().getInterfaces();
27 |
28 | for(Class clazz : interfaces){
29 | interfaceProvider.put(clazz.getName(),service);
30 | }
31 |
32 | }
33 |
34 | public Object getService(String interfaceName){
35 | return interfaceProvider.get(interfaceName);
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/src/main/java/com/ganghuan/myRPCVersion4/common/RPCResponse.java:
--------------------------------------------------------------------------------
1 | package com.ganghuan.myRPCVersion4.common;
2 |
3 |
4 |
5 | import lombok.AllArgsConstructor;
6 | import lombok.Builder;
7 | import lombok.Data;
8 |
9 | import java.io.Serializable;
10 |
11 | /**
12 | * 上个例子中response传输的是User对象,显然在一个应用中我们不可能只传输一种类型的对象
13 | * 由此需要传输对象抽象成为Object
14 | * Rpc需要经过网络传输,有可能失败,类似于http,引入状态码和状态信息表示服务调用成功还是失败
15 | */
16 | @Data
17 | @Builder
18 | @AllArgsConstructor
19 | public class RPCResponse implements Serializable {
20 |
21 | private int code;
22 | private String message;
23 | // 更新,这里我们需要加入这个,不然用其它序列化方式(除了java Serialize)得不到data的type
24 | private Class> dataType;
25 | private Object data;
26 |
27 | public static RPCResponse success(Object data) {
28 | return RPCResponse.builder().code(200).data(data).dataType(data.getClass()).build();
29 | }
30 | public static RPCResponse fail() {
31 | return RPCResponse.builder().code(500).message("服务器发生错误").build();
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/src/main/java/com/ganghuan/myRPCVersion5/common/RPCResponse.java:
--------------------------------------------------------------------------------
1 | package com.ganghuan.myRPCVersion5.common;
2 |
3 |
4 |
5 | import lombok.AllArgsConstructor;
6 | import lombok.Builder;
7 | import lombok.Data;
8 |
9 | import java.io.Serializable;
10 |
11 | /**
12 | * 上个例子中response传输的是User对象,显然在一个应用中我们不可能只传输一种类型的对象
13 | * 由此需要传输对象抽象成为Object
14 | * Rpc需要经过网络传输,有可能失败,类似于http,引入状态码和状态信息表示服务调用成功还是失败
15 | */
16 | @Data
17 | @Builder
18 | @AllArgsConstructor
19 | public class RPCResponse implements Serializable {
20 |
21 | private int code;
22 | private String message;
23 | // 更新,这里我们需要加入这个,不然用其它序列化方式(除了java Serialize)得不到data的type
24 | private Class> dataType;
25 | private Object data;
26 |
27 | public static RPCResponse success(Object data) {
28 | return RPCResponse.builder().code(200).data(data).dataType(data.getClass()).build();
29 | }
30 | public static RPCResponse fail() {
31 | return RPCResponse.builder().code(500).message("服务器发生错误").build();
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/src/main/java/com/ganghuan/myRPCVersion6/common/RPCResponse.java:
--------------------------------------------------------------------------------
1 | package com.ganghuan.myRPCVersion6.common;
2 |
3 |
4 |
5 | import lombok.AllArgsConstructor;
6 | import lombok.Builder;
7 | import lombok.Data;
8 |
9 | import java.io.Serializable;
10 |
11 | /**
12 | * 上个例子中response传输的是User对象,显然在一个应用中我们不可能只传输一种类型的对象
13 | * 由此需要传输对象抽象成为Object
14 | * Rpc需要经过网络传输,有可能失败,类似于http,引入状态码和状态信息表示服务调用成功还是失败
15 | */
16 | @Data
17 | @Builder
18 | @AllArgsConstructor
19 | public class RPCResponse implements Serializable {
20 |
21 | private int code;
22 | private String message;
23 | // 更新,这里我们需要加入这个,不然用其它序列化方式(除了java Serialize)得不到data的type
24 | private Class> dataType;
25 | private Object data;
26 |
27 | public static RPCResponse success(Object data) {
28 | return RPCResponse.builder().code(200).data(data).dataType(data.getClass()).build();
29 | }
30 | public static RPCResponse fail() {
31 | return RPCResponse.builder().code(500).message("服务器发生错误").build();
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/src/main/java/com/ganghuan/myRPCVersion3/client/NettyClientHandler.java:
--------------------------------------------------------------------------------
1 | package com.ganghuan.myRPCVersion3.client;
2 |
3 | import com.ganghuan.myRPCVersion3.common.RPCResponse;
4 | import io.netty.channel.ChannelHandler;
5 | import io.netty.channel.ChannelHandlerContext;
6 | import io.netty.channel.SimpleChannelInboundHandler;
7 | import io.netty.util.AttributeKey;
8 | import io.netty.util.concurrent.EventExecutorGroup;
9 |
10 | public class NettyClientHandler extends SimpleChannelInboundHandler {
11 | @Override
12 | protected void channelRead0(ChannelHandlerContext ctx, RPCResponse msg) throws Exception {
13 | // 接收到response, 给channel设计别名,让sendRequest里读取response
14 | AttributeKey key = AttributeKey.valueOf("RPCResponse");
15 | ctx.channel().attr(key).set(msg);
16 | ctx.channel().close();
17 | }
18 |
19 | @Override
20 | public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
21 | cause.printStackTrace();
22 | ctx.close();
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/src/main/java/com/ganghuan/myRPCVersion2/server/TestServer.java:
--------------------------------------------------------------------------------
1 | package com.ganghuan.myRPCVersion2.server;
2 |
3 |
4 | import com.ganghuan.myRPCVersion2.service.BlogService;
5 | import com.ganghuan.myRPCVersion2.service.UserService;
6 |
7 | import java.util.HashMap;
8 | import java.util.Map;
9 |
10 | public class TestServer {
11 | public static void main(String[] args) {
12 | UserService userService = new UserServiceImpl();
13 | BlogService blogService = new BlogServiceImpl();
14 |
15 | // Map serviceProvide = new HashMap<>();
16 | // serviceProvide.put("com.ganghuan.myRPCVersion2.service.UserService",userService);
17 | // serviceProvide.put("com.ganghuan.myRPCVersion2.service.BlogService",blogService);
18 | ServiceProvider serviceProvider = new ServiceProvider();
19 | serviceProvider.provideServiceInterface(userService);
20 | serviceProvider.provideServiceInterface(blogService);
21 |
22 | RPCServer RPCServer = new ThreadPoolRPCRPCServer(serviceProvider);
23 | RPCServer.start(8899);
24 | }
25 | }
--------------------------------------------------------------------------------
/src/main/java/com/ganghuan/myRPCVersion5/server/NettyServerInitializer.java:
--------------------------------------------------------------------------------
1 | package com.ganghuan.myRPCVersion5.server;
2 |
3 | import com.ganghuan.myRPCVersion5.codec.JsonSerializer;
4 | import com.ganghuan.myRPCVersion5.codec.MyDecode;
5 | import com.ganghuan.myRPCVersion5.codec.MyEncode;
6 | import io.netty.channel.ChannelInitializer;
7 | import io.netty.channel.ChannelPipeline;
8 | import io.netty.channel.socket.SocketChannel;
9 | import lombok.AllArgsConstructor;
10 |
11 | /**
12 | * 初始化,主要负责序列化的编码解码, 需要解决netty的粘包问题
13 | */
14 | @AllArgsConstructor
15 | public class NettyServerInitializer extends ChannelInitializer {
16 | private ServiceProvider serviceProvider;
17 | @Override
18 | protected void initChannel(SocketChannel ch) throws Exception {
19 | ChannelPipeline pipeline = ch.pipeline();
20 | // 使用自定义的编解码器
21 | pipeline.addLast(new MyDecode());
22 | // 编码需要传入序列化器,这里是json,还支持ObjectSerializer,也可以自己实现其他的
23 | pipeline.addLast(new MyEncode(new JsonSerializer()));
24 | pipeline.addLast(new NettyRPCServerHandler(serviceProvider));
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/src/main/java/com/ganghuan/myRPCVersion6/server/NettyServerInitializer.java:
--------------------------------------------------------------------------------
1 | package com.ganghuan.myRPCVersion6.server;
2 |
3 | import com.ganghuan.myRPCVersion6.codec.JsonSerializer;
4 | import com.ganghuan.myRPCVersion6.codec.MyDecode;
5 | import com.ganghuan.myRPCVersion6.codec.MyEncode;
6 | import io.netty.channel.ChannelInitializer;
7 | import io.netty.channel.ChannelPipeline;
8 | import io.netty.channel.socket.SocketChannel;
9 | import lombok.AllArgsConstructor;
10 |
11 | /**
12 | * 初始化,主要负责序列化的编码解码, 需要解决netty的粘包问题
13 | */
14 | @AllArgsConstructor
15 | public class NettyServerInitializer extends ChannelInitializer {
16 | private ServiceProvider serviceProvider;
17 | @Override
18 | protected void initChannel(SocketChannel ch) throws Exception {
19 | ChannelPipeline pipeline = ch.pipeline();
20 | // 使用自定义的编解码器
21 | pipeline.addLast(new MyDecode());
22 | // 编码需要传入序列化器,这里是json,还支持ObjectSerializer,也可以自己实现其他的
23 | pipeline.addLast(new MyEncode(new JsonSerializer()));
24 | pipeline.addLast(new NettyRPCServerHandler(serviceProvider));
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/src/main/java/com/ganghuan/myRPCVersion2/client/RPCClient.java:
--------------------------------------------------------------------------------
1 | package com.ganghuan.myRPCVersion2.client;
2 |
3 |
4 | import com.ganghuan.myRPCVersion2.common.Blog;
5 | import com.ganghuan.myRPCVersion2.common.User;
6 | import com.ganghuan.myRPCVersion2.service.BlogService;
7 | import com.ganghuan.myRPCVersion2.service.UserService;
8 |
9 | public class RPCClient {
10 | public static void main(String[] args) {
11 |
12 | RPCClientProxy rpcClientProxy = new RPCClientProxy("127.0.0.1", 8899);
13 | UserService userService = rpcClientProxy.getProxy(UserService.class);
14 |
15 | User userByUserId = userService.getUserByUserId(10);
16 | System.out.println("从服务端得到的user为:" + userByUserId);
17 |
18 | User user = User.builder().userName("张三").id(100).sex(true).build();
19 | Integer integer = userService.insertUserId(user);
20 | System.out.println("向服务端插入数据:"+integer);
21 |
22 | BlogService blogService = rpcClientProxy.getProxy(BlogService.class);
23 | Blog blogById = blogService.getBlogById(10000);
24 | System.out.println("从服务端得到的blog为:" + blogById);
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/src/main/java/com/ganghuan/myRPCVersion3/server/TestServer.java:
--------------------------------------------------------------------------------
1 | package com.ganghuan.myRPCVersion3.server;
2 |
3 |
4 | import com.ganghuan.myRPCVersion3.service.BlogService;
5 | import com.ganghuan.myRPCVersion3.service.BlogServiceImpl;
6 | import com.ganghuan.myRPCVersion3.service.UserService;
7 | import com.ganghuan.myRPCVersion3.service.UserServiceImpl;
8 |
9 | public class TestServer {
10 | public static void main(String[] args) {
11 | UserService userService = new UserServiceImpl();
12 | BlogService blogService = new BlogServiceImpl();
13 |
14 | // Map serviceProvide = new HashMap<>();
15 | // serviceProvide.put("com.ganghuan.myRPCVersion2.service.UserService",userService);
16 | // serviceProvide.put("com.ganghuan.myRPCVersion2.service.BlogService",blogService);
17 | ServiceProvider serviceProvider = new ServiceProvider();
18 | serviceProvider.provideServiceInterface(userService);
19 | serviceProvider.provideServiceInterface(blogService);
20 |
21 | RPCServer RPCServer = new NettyRPCServer(serviceProvider);
22 | RPCServer.start(8899);
23 | }
24 | }
--------------------------------------------------------------------------------
/src/main/java/com/ganghuan/myRPCVersion0/client/RPCClient.java:
--------------------------------------------------------------------------------
1 | package com.ganghuan.myRPCVersion0.client;
2 |
3 | import com.ganghuan.myRPCVersion0.common.User;
4 |
5 | import java.io.IOException;
6 | import java.io.ObjectInputStream;
7 | import java.io.ObjectOutputStream;
8 | import java.net.Socket;
9 | import java.util.Random;
10 |
11 | public class RPCClient {
12 | public static void main(String[] args) {
13 | try {
14 | // 建立Socket连接
15 | Socket socket = new Socket("127.0.0.1", 8899);
16 | ObjectOutputStream objectOutputStream = new ObjectOutputStream(socket.getOutputStream());
17 | ObjectInputStream objectInputStream = new ObjectInputStream(socket.getInputStream());
18 | // 传给服务器id
19 | objectOutputStream.writeInt(new Random().nextInt());
20 | objectOutputStream.flush();
21 | // 服务器查询数据,返回对应的对象
22 | User user = (User) objectInputStream.readObject();
23 | System.out.println("服务端返回的User:"+user);
24 |
25 | } catch (IOException | ClassNotFoundException e) {
26 | e.printStackTrace();
27 | System.out.println("客户端启动失败");
28 | }
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/src/main/java/com/ganghuan/myRPCVersion3/server/SimpleRPCRPCServer.java:
--------------------------------------------------------------------------------
1 | package com.ganghuan.myRPCVersion3.server;
2 |
3 | import java.io.IOException;
4 | import java.net.ServerSocket;
5 | import java.net.Socket;
6 |
7 | /**
8 | * 这个实现类代表着java原始的BIO监听模式,来一个任务,就new一个线程去处理
9 | * 处理任务的工作见WorkThread中
10 | */
11 | public class SimpleRPCRPCServer implements RPCServer {
12 | // 存着服务接口名-> service对象的map
13 | private ServiceProvider serviceProvider;
14 |
15 | public SimpleRPCRPCServer(ServiceProvider serviceProvide){
16 | this.serviceProvider = serviceProvide;
17 | }
18 |
19 | public void start(int port) {
20 | try {
21 | ServerSocket serverSocket = new ServerSocket(port);
22 | System.out.println("服务端启动了");
23 | // BIO的方式监听Socket
24 | while (true){
25 | Socket socket = serverSocket.accept();
26 | // 开启一个新线程去处理
27 | new Thread(new WorkThread(socket,serviceProvider)).start();
28 | }
29 | } catch (IOException e) {
30 | e.printStackTrace();
31 | System.out.println("服务器启动失败");
32 | }
33 | }
34 |
35 | public void stop(){
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/src/main/java/com/ganghuan/myRPCVersion4/server/SimpleRPCRPCServer.java:
--------------------------------------------------------------------------------
1 | package com.ganghuan.myRPCVersion4.server;
2 |
3 | import java.io.IOException;
4 | import java.net.ServerSocket;
5 | import java.net.Socket;
6 |
7 | /**
8 | * 这个实现类代表着java原始的BIO监听模式,来一个任务,就new一个线程去处理
9 | * 处理任务的工作见WorkThread中
10 | */
11 | public class SimpleRPCRPCServer implements RPCServer {
12 | // 存着服务接口名-> service对象的map
13 | private ServiceProvider serviceProvider;
14 |
15 | public SimpleRPCRPCServer(ServiceProvider serviceProvide){
16 | this.serviceProvider = serviceProvide;
17 | }
18 |
19 | public void start(int port) {
20 | try {
21 | ServerSocket serverSocket = new ServerSocket(port);
22 | System.out.println("服务端启动了");
23 | // BIO的方式监听Socket
24 | while (true){
25 | Socket socket = serverSocket.accept();
26 | // 开启一个新线程去处理
27 | new Thread(new WorkThread(socket,serviceProvider)).start();
28 | }
29 | } catch (IOException e) {
30 | e.printStackTrace();
31 | System.out.println("服务器启动失败");
32 | }
33 | }
34 |
35 | public void stop(){
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/src/main/java/com/ganghuan/myRPCVersion5/server/SimpleRPCRPCServer.java:
--------------------------------------------------------------------------------
1 | package com.ganghuan.myRPCVersion5.server;
2 |
3 | import java.io.IOException;
4 | import java.net.ServerSocket;
5 | import java.net.Socket;
6 |
7 | /**
8 | * 这个实现类代表着java原始的BIO监听模式,来一个任务,就new一个线程去处理
9 | * 处理任务的工作见WorkThread中
10 | */
11 | public class SimpleRPCRPCServer implements RPCServer {
12 | // 存着服务接口名-> service对象的map
13 | private ServiceProvider serviceProvider;
14 |
15 | public SimpleRPCRPCServer(ServiceProvider serviceProvide){
16 | this.serviceProvider = serviceProvide;
17 | }
18 |
19 | public void start(int port) {
20 | try {
21 | ServerSocket serverSocket = new ServerSocket(port);
22 | System.out.println("服务端启动了");
23 | // BIO的方式监听Socket
24 | while (true){
25 | Socket socket = serverSocket.accept();
26 | // 开启一个新线程去处理
27 | new Thread(new WorkThread(socket,serviceProvider)).start();
28 | }
29 | } catch (IOException e) {
30 | e.printStackTrace();
31 | System.out.println("服务器启动失败");
32 | }
33 | }
34 |
35 | public void stop(){
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/src/main/java/com/ganghuan/myRPCVersion6/server/SimpleRPCRPCServer.java:
--------------------------------------------------------------------------------
1 | package com.ganghuan.myRPCVersion6.server;
2 |
3 | import java.io.IOException;
4 | import java.net.ServerSocket;
5 | import java.net.Socket;
6 |
7 | /**
8 | * 这个实现类代表着java原始的BIO监听模式,来一个任务,就new一个线程去处理
9 | * 处理任务的工作见WorkThread中
10 | */
11 | public class SimpleRPCRPCServer implements RPCServer {
12 | // 存着服务接口名-> service对象的map
13 | private ServiceProvider serviceProvider;
14 |
15 | public SimpleRPCRPCServer(ServiceProvider serviceProvide){
16 | this.serviceProvider = serviceProvide;
17 | }
18 |
19 | public void start(int port) {
20 | try {
21 | ServerSocket serverSocket = new ServerSocket(port);
22 | System.out.println("服务端启动了");
23 | // BIO的方式监听Socket
24 | while (true){
25 | Socket socket = serverSocket.accept();
26 | // 开启一个新线程去处理
27 | new Thread(new WorkThread(socket,serviceProvider)).start();
28 | }
29 | } catch (IOException e) {
30 | e.printStackTrace();
31 | System.out.println("服务器启动失败");
32 | }
33 | }
34 |
35 | public void stop(){
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/src/main/java/com/ganghuan/myRPCVersion2/server/SimpleRPCRPCServer.java:
--------------------------------------------------------------------------------
1 | package com.ganghuan.myRPCVersion2.server;
2 |
3 | import java.io.IOException;
4 | import java.net.ServerSocket;
5 | import java.net.Socket;
6 | import java.util.Map;
7 |
8 | /**
9 | * 这个实现类代表着java原始的BIO监听模式,来一个任务,就new一个线程去处理
10 | * 处理任务的工作见WorkThread中
11 | */
12 | public class SimpleRPCRPCServer implements RPCServer {
13 | // 存着服务接口名-> service对象的map
14 | private ServiceProvider serviceProvider;
15 |
16 | public SimpleRPCRPCServer(ServiceProvider serviceProvide){
17 | this.serviceProvider = serviceProvide;
18 | }
19 |
20 | public void start(int port) {
21 | try {
22 | ServerSocket serverSocket = new ServerSocket(port);
23 | System.out.println("服务端启动了");
24 | // BIO的方式监听Socket
25 | while (true){
26 | Socket socket = serverSocket.accept();
27 | // 开启一个新线程去处理
28 | new Thread(new WorkThread(socket,serviceProvider)).start();
29 | }
30 | } catch (IOException e) {
31 | e.printStackTrace();
32 | System.out.println("服务器启动失败");
33 | }
34 | }
35 |
36 | public void stop(){
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/src/main/java/com/ganghuan/myRPCVersion4/client/NettyClientInitializer.java:
--------------------------------------------------------------------------------
1 | package com.ganghuan.myRPCVersion4.client;
2 |
3 | import com.ganghuan.myRPCVersion4.codec.JsonSerializer;
4 | import com.ganghuan.myRPCVersion4.codec.MyDecode;
5 | import com.ganghuan.myRPCVersion4.codec.MyEncode;
6 | import io.netty.channel.ChannelInitializer;
7 | import io.netty.channel.ChannelPipeline;
8 | import io.netty.channel.socket.SocketChannel;
9 | import io.netty.handler.codec.LengthFieldBasedFrameDecoder;
10 | import io.netty.handler.codec.LengthFieldPrepender;
11 | import io.netty.handler.codec.serialization.ClassResolver;
12 | import io.netty.handler.codec.serialization.ObjectDecoder;
13 | import io.netty.handler.codec.serialization.ObjectEncoder;
14 |
15 | /**
16 | * 同样的与服务端解码和编码格式
17 | */
18 | public class NettyClientInitializer extends ChannelInitializer {
19 | @Override
20 | protected void initChannel(SocketChannel ch) throws Exception {
21 | ChannelPipeline pipeline = ch.pipeline();
22 | // 使用自定义的编解码器
23 | pipeline.addLast(new MyDecode());
24 | // 编码需要传入序列化器,这里是json,还支持ObjectSerializer,也可以自己实现其他的
25 | pipeline.addLast(new MyEncode(new JsonSerializer()));
26 | pipeline.addLast(new NettyClientHandler());
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/src/main/java/com/ganghuan/myRPCVersion4/codec/MyEncode.java:
--------------------------------------------------------------------------------
1 | package com.ganghuan.myRPCVersion4.codec;
2 |
3 | import com.ganghuan.myRPCVersion4.common.RPCRequest;
4 | import com.ganghuan.myRPCVersion4.common.RPCResponse;
5 | import io.netty.buffer.ByteBuf;
6 | import io.netty.channel.ChannelHandlerContext;
7 | import io.netty.handler.codec.MessageToByteEncoder;
8 | import lombok.AllArgsConstructor;
9 |
10 | /**
11 | * 依次按照自定义的消息格式写入,传入的数据为request或者response
12 | * 需要持有一个serialize器,负责将传入的对象序列化成字节数组
13 | */
14 | @AllArgsConstructor
15 | public class MyEncode extends MessageToByteEncoder {
16 | private Serializer serializer;
17 |
18 | @Override
19 | protected void encode(ChannelHandlerContext ctx, Object msg, ByteBuf out) throws Exception {
20 | // 写入消息类型
21 | if(msg instanceof RPCRequest){
22 | out.writeShort(MessageType.REQUEST.getCode());
23 | }
24 | else if(msg instanceof RPCResponse){
25 | out.writeShort(MessageType.RESPONSE.getCode());
26 | }
27 | // 写入序列化方式
28 | out.writeShort(serializer.getType());
29 | // 得到序列化数组
30 | byte[] serialize = serializer.serialize(msg);
31 | // 写入长度
32 | out.writeInt(serialize.length);
33 | // 写入序列化字节数组
34 | out.writeBytes(serialize);
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/src/main/java/com/ganghuan/myRPCVersion5/codec/MyEncode.java:
--------------------------------------------------------------------------------
1 | package com.ganghuan.myRPCVersion5.codec;
2 |
3 | import com.ganghuan.myRPCVersion5.common.RPCRequest;
4 | import com.ganghuan.myRPCVersion5.common.RPCResponse;
5 | import io.netty.buffer.ByteBuf;
6 | import io.netty.channel.ChannelHandlerContext;
7 | import io.netty.handler.codec.MessageToByteEncoder;
8 | import lombok.AllArgsConstructor;
9 |
10 | /**
11 | * 依次按照自定义的消息格式写入,传入的数据为request或者response
12 | * 需要持有一个serialize器,负责将传入的对象序列化成字节数组
13 | */
14 | @AllArgsConstructor
15 | public class MyEncode extends MessageToByteEncoder {
16 | private Serializer serializer;
17 |
18 | @Override
19 | protected void encode(ChannelHandlerContext ctx, Object msg, ByteBuf out) throws Exception {
20 | // 写入消息类型
21 | if(msg instanceof RPCRequest){
22 | out.writeShort(MessageType.REQUEST.getCode());
23 | }
24 | else if(msg instanceof RPCResponse){
25 | out.writeShort(MessageType.RESPONSE.getCode());
26 | }
27 | // 写入序列化方式
28 | out.writeShort(serializer.getType());
29 | // 得到序列化数组
30 | byte[] serialize = serializer.serialize(msg);
31 | // 写入长度
32 | out.writeInt(serialize.length);
33 | // 写入序列化字节数组
34 | out.writeBytes(serialize);
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/src/main/java/com/ganghuan/myRPCVersion6/codec/MyEncode.java:
--------------------------------------------------------------------------------
1 | package com.ganghuan.myRPCVersion6.codec;
2 |
3 | import com.ganghuan.myRPCVersion6.common.RPCRequest;
4 | import com.ganghuan.myRPCVersion6.common.RPCResponse;
5 | import io.netty.buffer.ByteBuf;
6 | import io.netty.channel.ChannelHandlerContext;
7 | import io.netty.handler.codec.MessageToByteEncoder;
8 | import lombok.AllArgsConstructor;
9 |
10 | /**
11 | * 依次按照自定义的消息格式写入,传入的数据为request或者response
12 | * 需要持有一个serialize器,负责将传入的对象序列化成字节数组
13 | */
14 | @AllArgsConstructor
15 | public class MyEncode extends MessageToByteEncoder {
16 | private Serializer serializer;
17 |
18 | @Override
19 | protected void encode(ChannelHandlerContext ctx, Object msg, ByteBuf out) throws Exception {
20 | // 写入消息类型
21 | if(msg instanceof RPCRequest){
22 | out.writeShort(MessageType.REQUEST.getCode());
23 | }
24 | else if(msg instanceof RPCResponse){
25 | out.writeShort(MessageType.RESPONSE.getCode());
26 | }
27 | // 写入序列化方式
28 | out.writeShort(serializer.getType());
29 | // 得到序列化数组
30 | byte[] serialize = serializer.serialize(msg);
31 | // 写入长度
32 | out.writeInt(serialize.length);
33 | // 写入序列化字节数组
34 | out.writeBytes(serialize);
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/src/main/java/com/ganghuan/myRPCVersion3/client/RPCClientProxy.java:
--------------------------------------------------------------------------------
1 | package com.ganghuan.myRPCVersion3.client;
2 |
3 |
4 | import com.ganghuan.myRPCVersion3.common.RPCRequest;
5 | import com.ganghuan.myRPCVersion3.common.RPCResponse;
6 | import lombok.AllArgsConstructor;
7 |
8 | import java.lang.reflect.InvocationHandler;
9 | import java.lang.reflect.Method;
10 | import java.lang.reflect.Proxy;
11 |
12 | @AllArgsConstructor
13 | public class RPCClientProxy implements InvocationHandler {
14 | private RPCClient client;
15 |
16 | // jdk 动态代理, 每一次代理对象调用方法,会经过此方法增强(反射获取request对象,socket发送至客户端)
17 | @Override
18 | public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
19 | // request的构建,使用了lombok中的builder,代码简洁
20 | RPCRequest request = RPCRequest.builder().interfaceName(method.getDeclaringClass().getName())
21 | .methodName(method.getName())
22 | .params(args).paramsTypes(method.getParameterTypes()).build();
23 | //数据传输
24 | RPCResponse response = client.sendRequest(request);
25 | //System.out.println(response);
26 | return response.getData();
27 | }
28 | T getProxy(Class clazz){
29 | Object o = Proxy.newProxyInstance(clazz.getClassLoader(), new Class[]{clazz}, this);
30 | return (T)o;
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/src/main/java/com/ganghuan/myRPCVersion4/client/RPCClientProxy.java:
--------------------------------------------------------------------------------
1 | package com.ganghuan.myRPCVersion4.client;
2 |
3 |
4 | import com.ganghuan.myRPCVersion4.common.RPCRequest;
5 | import com.ganghuan.myRPCVersion4.common.RPCResponse;
6 | import lombok.AllArgsConstructor;
7 |
8 | import java.lang.reflect.InvocationHandler;
9 | import java.lang.reflect.Method;
10 | import java.lang.reflect.Proxy;
11 |
12 | @AllArgsConstructor
13 | public class RPCClientProxy implements InvocationHandler {
14 | private RPCClient client;
15 |
16 | // jdk 动态代理, 每一次代理对象调用方法,会经过此方法增强(反射获取request对象,socket发送至客户端)
17 | @Override
18 | public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
19 | // request的构建,使用了lombok中的builder,代码简洁
20 | RPCRequest request = RPCRequest.builder().interfaceName(method.getDeclaringClass().getName())
21 | .methodName(method.getName())
22 | .params(args).paramsTypes(method.getParameterTypes()).build();
23 | //数据传输
24 | RPCResponse response = client.sendRequest(request);
25 | //System.out.println(response);
26 | return response.getData();
27 | }
28 | T getProxy(Class clazz){
29 | Object o = Proxy.newProxyInstance(clazz.getClassLoader(), new Class[]{clazz}, this);
30 | return (T)o;
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/src/main/java/com/ganghuan/myRPCVersion5/client/RPCClientProxy.java:
--------------------------------------------------------------------------------
1 | package com.ganghuan.myRPCVersion5.client;
2 |
3 |
4 | import com.ganghuan.myRPCVersion5.common.RPCRequest;
5 | import com.ganghuan.myRPCVersion5.common.RPCResponse;
6 | import lombok.AllArgsConstructor;
7 |
8 | import java.lang.reflect.InvocationHandler;
9 | import java.lang.reflect.Method;
10 | import java.lang.reflect.Proxy;
11 |
12 | @AllArgsConstructor
13 | public class RPCClientProxy implements InvocationHandler {
14 | private RPCClient client;
15 |
16 | // jdk 动态代理, 每一次代理对象调用方法,会经过此方法增强(反射获取request对象,socket发送至客户端)
17 | @Override
18 | public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
19 | // request的构建,使用了lombok中的builder,代码简洁
20 | RPCRequest request = RPCRequest.builder().interfaceName(method.getDeclaringClass().getName())
21 | .methodName(method.getName())
22 | .params(args).paramsTypes(method.getParameterTypes()).build();
23 | //数据传输
24 | RPCResponse response = client.sendRequest(request);
25 | //System.out.println(response);
26 | return response.getData();
27 | }
28 | T getProxy(Class clazz){
29 | Object o = Proxy.newProxyInstance(clazz.getClassLoader(), new Class[]{clazz}, this);
30 | return (T)o;
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/src/main/java/com/ganghuan/myRPCVersion5/client/TestClient.java:
--------------------------------------------------------------------------------
1 | package com.ganghuan.myRPCVersion5.client;
2 |
3 | import com.ganghuan.myRPCVersion5.common.Blog;
4 | import com.ganghuan.myRPCVersion5.common.User;
5 | import com.ganghuan.myRPCVersion5.service.BlogService;
6 | import com.ganghuan.myRPCVersion5.service.UserService;
7 |
8 | public class TestClient {
9 | public static void main(String[] args) {
10 | // 构建一个使用java Socket/ netty/....传输的客户端
11 | RPCClient rpcClient = new NettyRPCClient();
12 | // 把这个客户端传入代理客户端
13 | RPCClientProxy rpcClientProxy = new RPCClientProxy(rpcClient);
14 | // 代理客户端根据不同的服务,获得一个代理类, 并且这个代理类的方法以或者增强(封装数据,发送请求)
15 | UserService userService = rpcClientProxy.getProxy(UserService.class);
16 | // 调用方法
17 | User userByUserId = userService.getUserByUserId(10);
18 | System.out.println("从服务端得到的user为:" + userByUserId);
19 |
20 | User user = User.builder().userName("张三").id(100).sex(true).build();
21 | Integer integer = userService.insertUserId(user);
22 | System.out.println("向服务端插入数据:"+integer);
23 |
24 | BlogService blogService = rpcClientProxy.getProxy(BlogService.class);
25 |
26 | Blog blogById = blogService.getBlogById(10000);
27 | System.out.println("从服务端得到的blog为:" + blogById);
28 |
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/src/main/java/com/ganghuan/myRPCVersion6/client/RPCClientProxy.java:
--------------------------------------------------------------------------------
1 | package com.ganghuan.myRPCVersion6.client;
2 |
3 |
4 | import com.ganghuan.myRPCVersion6.common.RPCRequest;
5 | import com.ganghuan.myRPCVersion6.common.RPCResponse;
6 | import lombok.AllArgsConstructor;
7 |
8 | import java.lang.reflect.InvocationHandler;
9 | import java.lang.reflect.Method;
10 | import java.lang.reflect.Proxy;
11 |
12 | @AllArgsConstructor
13 | public class RPCClientProxy implements InvocationHandler {
14 | private RPCClient client;
15 |
16 | // jdk 动态代理, 每一次代理对象调用方法,会经过此方法增强(反射获取request对象,socket发送至客户端)
17 | @Override
18 | public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
19 | // request的构建,使用了lombok中的builder,代码简洁
20 | RPCRequest request = RPCRequest.builder().interfaceName(method.getDeclaringClass().getName())
21 | .methodName(method.getName())
22 | .params(args).paramsTypes(method.getParameterTypes()).build();
23 | //数据传输
24 | RPCResponse response = client.sendRequest(request);
25 | //System.out.println(response);
26 | return response.getData();
27 | }
28 | T getProxy(Class clazz){
29 | Object o = Proxy.newProxyInstance(clazz.getClassLoader(), new Class[]{clazz}, this);
30 | return (T)o;
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/src/main/java/com/ganghuan/myRPCVersion3/client/TestClient.java:
--------------------------------------------------------------------------------
1 | package com.ganghuan.myRPCVersion3.client;
2 |
3 | import com.ganghuan.myRPCVersion3.common.Blog;
4 | import com.ganghuan.myRPCVersion3.common.User;
5 | import com.ganghuan.myRPCVersion3.service.BlogService;
6 | import com.ganghuan.myRPCVersion3.service.UserService;
7 |
8 | public class TestClient {
9 | public static void main(String[] args) {
10 | // 构建一个使用java Socket/ netty/....传输的客户端
11 | RPCClient rpcClient = new NettyRPCClient("127.0.0.1", 8899);
12 | // 把这个客户端传入代理客户端
13 | RPCClientProxy rpcClientProxy = new RPCClientProxy(rpcClient);
14 | // 代理客户端根据不同的服务,获得一个代理类, 并且这个代理类的方法以或者增强(封装数据,发送请求)
15 | UserService userService = rpcClientProxy.getProxy(UserService.class);
16 | // 调用方法
17 | User userByUserId = userService.getUserByUserId(10);
18 | System.out.println("从服务端得到的user为:" + userByUserId);
19 |
20 | User user = User.builder().userName("张三").id(100).sex(true).build();
21 | Integer integer = userService.insertUserId(user);
22 | System.out.println("向服务端插入数据:"+integer);
23 |
24 | BlogService blogService = rpcClientProxy.getProxy(BlogService.class);
25 |
26 | Blog blogById = blogService.getBlogById(10000);
27 | System.out.println("从服务端得到的blog为:" + blogById);
28 |
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/src/main/java/com/ganghuan/myRPCVersion4/client/TestClient.java:
--------------------------------------------------------------------------------
1 | package com.ganghuan.myRPCVersion4.client;
2 |
3 | import com.ganghuan.myRPCVersion4.common.Blog;
4 | import com.ganghuan.myRPCVersion4.common.User;
5 | import com.ganghuan.myRPCVersion4.service.BlogService;
6 | import com.ganghuan.myRPCVersion4.service.UserService;
7 |
8 | public class TestClient {
9 | public static void main(String[] args) {
10 | // 构建一个使用java Socket/ netty/....传输的客户端
11 | RPCClient rpcClient = new NettyRPCClient("127.0.0.1", 8899);
12 | // 把这个客户端传入代理客户端
13 | RPCClientProxy rpcClientProxy = new RPCClientProxy(rpcClient);
14 | // 代理客户端根据不同的服务,获得一个代理类, 并且这个代理类的方法以或者增强(封装数据,发送请求)
15 | UserService userService = rpcClientProxy.getProxy(UserService.class);
16 | // 调用方法
17 | User userByUserId = userService.getUserByUserId(10);
18 | System.out.println("从服务端得到的user为:" + userByUserId);
19 |
20 | User user = User.builder().userName("张三").id(100).sex(true).build();
21 | Integer integer = userService.insertUserId(user);
22 | System.out.println("向服务端插入数据:"+integer);
23 |
24 | BlogService blogService = rpcClientProxy.getProxy(BlogService.class);
25 |
26 | Blog blogById = blogService.getBlogById(10000);
27 | System.out.println("从服务端得到的blog为:" + blogById);
28 |
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/src/main/java/com/ganghuan/myRPCVersion1/client/IOClient.java:
--------------------------------------------------------------------------------
1 | package com.ganghuan.myRPCVersion1.client;
2 |
3 | import com.ganghuan.myRPCVersion1.common.RPCRequest;
4 | import com.ganghuan.myRPCVersion1.common.RPCResponse;
5 |
6 | import java.io.IOException;
7 | import java.io.ObjectInputStream;
8 | import java.io.ObjectOutputStream;
9 | import java.net.Socket;
10 |
11 | public class IOClient {
12 | // 这里负责底层与服务端的通信,发送的Request,接受的是Response对象
13 | // 客户端发起一次请求调用,Socket建立连接,发起请求Request,得到响应Response
14 | // 这里的request是封装好的(上层进行封装),不同的service需要进行不同的封装, 客户端只知道Service接口,需要一层动态代理根据反射封装不同的Service
15 | public static RPCResponse sendRequest(String host, int port, RPCRequest request){
16 | try {
17 | Socket socket = new Socket(host, port);
18 |
19 | ObjectOutputStream objectOutputStream = new ObjectOutputStream(socket.getOutputStream());
20 | ObjectInputStream objectInputStream = new ObjectInputStream(socket.getInputStream());
21 |
22 | System.out.println(request);
23 | objectOutputStream.writeObject(request);
24 | objectOutputStream.flush();
25 |
26 | RPCResponse response = (RPCResponse) objectInputStream.readObject();
27 |
28 | return response;
29 | } catch (IOException | ClassNotFoundException e) {
30 | System.out.println();
31 | return null;
32 | }
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/src/main/java/com/ganghuan/myRPCVersion1/client/ClientProxy.java:
--------------------------------------------------------------------------------
1 | package com.ganghuan.myRPCVersion1.client;
2 |
3 | import com.ganghuan.myRPCVersion1.common.RPCRequest;
4 | import com.ganghuan.myRPCVersion1.common.RPCResponse;
5 | import lombok.AllArgsConstructor;
6 |
7 | import java.lang.reflect.InvocationHandler;
8 | import java.lang.reflect.Method;
9 | import java.lang.reflect.Proxy;
10 |
11 | @AllArgsConstructor
12 | public class ClientProxy implements InvocationHandler {
13 | // 传入参数Service接口的class对象,反射封装成一个request
14 | private String host;
15 | private int port;
16 |
17 |
18 | // jdk 动态代理, 每一次代理对象调用方法,会经过此方法增强(反射获取request对象,socket发送至客户端)
19 | @Override
20 | public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
21 | // request的构建,使用了lombok中的builder,代码简洁
22 | RPCRequest request = RPCRequest.builder().interfaceName(method.getDeclaringClass().getName())
23 | .methodName(method.getName())
24 | .params(args).paramsTypes(method.getParameterTypes()).build();
25 | //数据传输
26 | RPCResponse response = IOClient.sendRequest(host, port, request);
27 | //System.out.println(response);
28 | return response.getData();
29 | }
30 | T getProxy(Class clazz){
31 | Object o = Proxy.newProxyInstance(clazz.getClassLoader(), new Class[]{clazz}, this);
32 | return (T)o;
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/src/main/java/com/ganghuan/myRPCVersion4/server/NettyServerInitializer.java:
--------------------------------------------------------------------------------
1 | package com.ganghuan.myRPCVersion4.server;
2 |
3 | import com.ganghuan.myRPCVersion4.codec.JsonSerializer;
4 | import com.ganghuan.myRPCVersion4.codec.MyDecode;
5 | import com.ganghuan.myRPCVersion4.codec.MyEncode;
6 | import io.netty.channel.ChannelInitializer;
7 | import io.netty.channel.ChannelPipeline;
8 | import io.netty.channel.socket.SocketChannel;
9 | import io.netty.handler.codec.LengthFieldBasedFrameDecoder;
10 | import io.netty.handler.codec.LengthFieldPrepender;
11 | import io.netty.handler.codec.serialization.ClassResolver;
12 | import io.netty.handler.codec.serialization.ObjectDecoder;
13 | import io.netty.handler.codec.serialization.ObjectEncoder;
14 | import lombok.AllArgsConstructor;
15 |
16 | /**
17 | * 初始化,主要负责序列化的编码解码, 需要解决netty的粘包问题
18 | */
19 | @AllArgsConstructor
20 | public class NettyServerInitializer extends ChannelInitializer {
21 | private ServiceProvider serviceProvider;
22 | @Override
23 | protected void initChannel(SocketChannel ch) throws Exception {
24 | ChannelPipeline pipeline = ch.pipeline();
25 | // 使用自定义的编解码器
26 | pipeline.addLast(new MyDecode());
27 | // 编码需要传入序列化器,这里是json,还支持ObjectSerializer,也可以自己实现其他的
28 | pipeline.addLast(new MyEncode(new JsonSerializer()));
29 | pipeline.addLast(new NettyRPCServerHandler(serviceProvider));
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/src/main/java/com/ganghuan/myRPCVersion2/client/IOClient.java:
--------------------------------------------------------------------------------
1 | package com.ganghuan.myRPCVersion2.client;
2 |
3 |
4 | import com.ganghuan.myRPCVersion2.common.RPCRequest;
5 | import com.ganghuan.myRPCVersion2.common.RPCResponse;
6 |
7 | import java.io.IOException;
8 | import java.io.ObjectInputStream;
9 | import java.io.ObjectOutputStream;
10 | import java.net.Socket;
11 |
12 | public class IOClient {
13 | // 客户端发起一次请求调用,Socket建立连接,发起请求Request,得到响应Response
14 | // 这里的request是封装好的,不同的service需要进行不同的封装, 客户端只知道Service接口,需要一层动态代理根据反射封装不同的Service
15 | public static RPCResponse sendRequest(String host, int port, RPCRequest request){
16 | try {
17 | Socket socket = new Socket(host, port);
18 |
19 | ObjectOutputStream objectOutputStream = new ObjectOutputStream(socket.getOutputStream());
20 | ObjectInputStream objectInputStream = new ObjectInputStream(socket.getInputStream());
21 |
22 | System.out.println(request);
23 | objectOutputStream.writeObject(request);
24 | objectOutputStream.flush();
25 |
26 | RPCResponse response = (RPCResponse) objectInputStream.readObject();
27 |
28 | //System.out.println(response.getData());
29 | return response;
30 | } catch (IOException | ClassNotFoundException e) {
31 | System.out.println();
32 | return null;
33 | }
34 |
35 | }
36 |
37 | }
38 |
--------------------------------------------------------------------------------
/src/main/java/com/ganghuan/myRPCVersion6/client/TestClient.java:
--------------------------------------------------------------------------------
1 | package com.ganghuan.myRPCVersion6.client;
2 |
3 | import com.ganghuan.myRPCVersion6.common.Blog;
4 | import com.ganghuan.myRPCVersion6.common.User;
5 | import com.ganghuan.myRPCVersion6.service.BlogService;
6 | import com.ganghuan.myRPCVersion6.service.UserService;
7 |
8 | public class TestClient {
9 | public static void main(String[] args) {
10 | // 构建一个使用java Socket/ netty/....传输的客户端
11 | RPCClient rpcClient = new NettyRPCClient();
12 | // 把这个客户端传入代理客户端
13 | RPCClientProxy rpcClientProxy = new RPCClientProxy(rpcClient);
14 | // 代理客户端根据不同的服务,获得一个代理类, 并且这个代理类的方法以或者增强(封装数据,发送请求)
15 | UserService userService = rpcClientProxy.getProxy(UserService.class);
16 | // 调用方法
17 | User userByUserId = userService.getUserByUserId(10);
18 | System.out.println("从服务端得到的user为:" + userByUserId);
19 |
20 | User user = User.builder().userName("张三").id(100).sex(true).build();
21 | Integer integer = userService.insertUserId(user);
22 | System.out.println("向服务端插入数据:"+integer);
23 |
24 | BlogService blogService = rpcClientProxy.getProxy(BlogService.class);
25 |
26 | Blog blogById = blogService.getBlogById(10000);
27 | System.out.println("从服务端得到的blog为:" + blogById);
28 | // 测试json调用空参数方法
29 | System.out.println(userService.hello());
30 |
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/src/main/java/com/ganghuan/myRPCVersion2/client/RPCClientProxy.java:
--------------------------------------------------------------------------------
1 | package com.ganghuan.myRPCVersion2.client;
2 |
3 |
4 | import com.ganghuan.myRPCVersion2.common.RPCRequest;
5 | import com.ganghuan.myRPCVersion2.common.RPCResponse;
6 | import lombok.AllArgsConstructor;
7 |
8 | import java.lang.reflect.InvocationHandler;
9 | import java.lang.reflect.Method;
10 | import java.lang.reflect.Proxy;
11 |
12 | @AllArgsConstructor
13 | public class RPCClientProxy implements InvocationHandler {
14 | // 传入参数Service接口的class对象,反射封装成一个request
15 | private String host;
16 | private int port;
17 |
18 |
19 | // jdk 动态代理, 每一次代理对象调用方法,会经过此方法增强(反射获取request对象,socket发送至客户端)
20 | @Override
21 | public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
22 | // request的构建,使用了lombok中的builder,代码简洁
23 | RPCRequest request = RPCRequest.builder().interfaceName(method.getDeclaringClass().getName())
24 | .methodName(method.getName())
25 | .params(args).paramsTypes(method.getParameterTypes()).build();
26 | //数据传输
27 | RPCResponse response = IOClient.sendRequest(host, port, request);
28 | //System.out.println(response);
29 | return response.getData();
30 | }
31 | T getProxy(Class clazz){
32 | Object o = Proxy.newProxyInstance(clazz.getClassLoader(), new Class[]{clazz}, this);
33 | return (T)o;
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/src/main/java/com/ganghuan/myRPCVersion3/client/NettyClientInitializer.java:
--------------------------------------------------------------------------------
1 | package com.ganghuan.myRPCVersion3.client;
2 |
3 | import io.netty.channel.ChannelInitializer;
4 | import io.netty.channel.ChannelPipeline;
5 | import io.netty.channel.socket.SocketChannel;
6 | import io.netty.handler.codec.LengthFieldBasedFrameDecoder;
7 | import io.netty.handler.codec.LengthFieldPrepender;
8 | import io.netty.handler.codec.serialization.ClassResolver;
9 | import io.netty.handler.codec.serialization.ObjectDecoder;
10 | import io.netty.handler.codec.serialization.ObjectEncoder;
11 |
12 | /**
13 | * 同样的与服务端解码和编码格式
14 | */
15 | public class NettyClientInitializer extends ChannelInitializer {
16 | @Override
17 | protected void initChannel(SocketChannel ch) throws Exception {
18 | ChannelPipeline pipeline = ch.pipeline();
19 | // 消息格式 [长度][消息体]
20 | pipeline.addLast(new LengthFieldBasedFrameDecoder(Integer.MAX_VALUE,0,4,0,4));
21 | // 计算当前待大宋消息的长度,写入到前4个字节中
22 | pipeline.addLast(new LengthFieldPrepender(4));
23 | pipeline.addLast(new ObjectEncoder());
24 |
25 | pipeline.addLast(new ObjectDecoder(new ClassResolver() {
26 | @Override
27 | public Class> resolve(String className) throws ClassNotFoundException {
28 | return Class.forName(className);
29 | }
30 | }));
31 |
32 | pipeline.addLast(new NettyClientHandler());
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/src/main/java/com/ganghuan/myRPCVersion4/codec/ObjectSerializer.java:
--------------------------------------------------------------------------------
1 | package com.ganghuan.myRPCVersion4.codec;
2 |
3 | import java.io.*;
4 |
5 | public class ObjectSerializer implements Serializer{
6 |
7 | // 利用java IO 对象 -> 字节数组
8 | @Override
9 | public byte[] serialize(Object obj) {
10 | byte[] bytes = null;
11 | ByteArrayOutputStream bos = new ByteArrayOutputStream();
12 | try {
13 | ObjectOutputStream oos = new ObjectOutputStream(bos);
14 | oos.writeObject(obj);
15 | oos.flush();
16 | bytes = bos.toByteArray();
17 | oos.close();
18 | bos.close();
19 | } catch (IOException e) {
20 | e.printStackTrace();
21 | }
22 |
23 | return bytes;
24 | }
25 |
26 | // 字节数组 -> 对象
27 | @Override
28 | public Object deserialize(byte[] bytes, int messageType) {
29 | Object obj = null;
30 | ByteArrayInputStream bis = new ByteArrayInputStream(bytes);
31 | try {
32 | ObjectInputStream ois = new ObjectInputStream(bis);
33 | obj = ois.readObject();
34 | ois.close();
35 | bis.close();
36 | } catch (IOException | ClassNotFoundException e) {
37 | e.printStackTrace();
38 | }
39 | return obj;
40 | }
41 |
42 | // 0 代表java原生序列化器
43 | @Override
44 | public int getType() {
45 | return 0;
46 | }
47 | }
48 |
49 |
--------------------------------------------------------------------------------
/src/main/java/com/ganghuan/myRPCVersion5/codec/ObjectSerializer.java:
--------------------------------------------------------------------------------
1 | package com.ganghuan.myRPCVersion5.codec;
2 |
3 | import java.io.*;
4 |
5 | public class ObjectSerializer implements Serializer {
6 |
7 | // 利用java IO 对象 -> 字节数组
8 | @Override
9 | public byte[] serialize(Object obj) {
10 | byte[] bytes = null;
11 | ByteArrayOutputStream bos = new ByteArrayOutputStream();
12 | try {
13 | ObjectOutputStream oos = new ObjectOutputStream(bos);
14 | oos.writeObject(obj);
15 | oos.flush();
16 | bytes = bos.toByteArray();
17 | oos.close();
18 | bos.close();
19 | } catch (IOException e) {
20 | e.printStackTrace();
21 | }
22 |
23 | return bytes;
24 | }
25 |
26 | // 字节数组 -> 对象
27 | @Override
28 | public Object deserialize(byte[] bytes, int messageType) {
29 | Object obj = null;
30 | ByteArrayInputStream bis = new ByteArrayInputStream(bytes);
31 | try {
32 | ObjectInputStream ois = new ObjectInputStream(bis);
33 | obj = ois.readObject();
34 | ois.close();
35 | bis.close();
36 | } catch (IOException | ClassNotFoundException e) {
37 | e.printStackTrace();
38 | }
39 | return obj;
40 | }
41 |
42 | // 0 代表java原生序列化器
43 | @Override
44 | public int getType() {
45 | return 0;
46 | }
47 | }
48 |
49 |
--------------------------------------------------------------------------------
/src/main/java/com/ganghuan/myRPCVersion6/codec/ObjectSerializer.java:
--------------------------------------------------------------------------------
1 | package com.ganghuan.myRPCVersion6.codec;
2 |
3 | import java.io.*;
4 |
5 | public class ObjectSerializer implements Serializer {
6 |
7 | // 利用java IO 对象 -> 字节数组
8 | @Override
9 | public byte[] serialize(Object obj) {
10 | byte[] bytes = null;
11 | ByteArrayOutputStream bos = new ByteArrayOutputStream();
12 | try {
13 | ObjectOutputStream oos = new ObjectOutputStream(bos);
14 | oos.writeObject(obj);
15 | oos.flush();
16 | bytes = bos.toByteArray();
17 | oos.close();
18 | bos.close();
19 | } catch (IOException e) {
20 | e.printStackTrace();
21 | }
22 |
23 | return bytes;
24 | }
25 |
26 | // 字节数组 -> 对象
27 | @Override
28 | public Object deserialize(byte[] bytes, int messageType) {
29 | Object obj = null;
30 | ByteArrayInputStream bis = new ByteArrayInputStream(bytes);
31 | try {
32 | ObjectInputStream ois = new ObjectInputStream(bis);
33 | obj = ois.readObject();
34 | ois.close();
35 | bis.close();
36 | } catch (IOException | ClassNotFoundException e) {
37 | e.printStackTrace();
38 | }
39 | return obj;
40 | }
41 |
42 | // 0 代表java原生序列化器
43 | @Override
44 | public int getType() {
45 | return 0;
46 | }
47 | }
48 |
49 |
--------------------------------------------------------------------------------
/src/main/java/com/ganghuan/myRPCVersion4/codec/MyDecode.java:
--------------------------------------------------------------------------------
1 | package com.ganghuan.myRPCVersion4.codec;
2 |
3 | import io.netty.buffer.ByteBuf;
4 | import io.netty.channel.ChannelHandlerContext;
5 | import io.netty.handler.codec.ByteToMessageDecoder;
6 | import lombok.AllArgsConstructor;
7 |
8 | import java.util.List;
9 |
10 | /**
11 | * 按照自定义的消息格式解码数据
12 | */
13 | @AllArgsConstructor
14 | public class MyDecode extends ByteToMessageDecoder {
15 |
16 |
17 | @Override
18 | protected void decode(ChannelHandlerContext ctx, ByteBuf in, List