diff --git a/pom.xml b/pom.xml
index 8514171c..e3eb3116 100644
--- a/pom.xml
+++ b/pom.xml
@@ -44,6 +44,7 @@
powerjob-worker-spring-boot-starter
powerjob-worker-samples
powerjob-official-processors
+ powerjob-remote
diff --git a/powerjob-remote/pom.xml b/powerjob-remote/pom.xml
new file mode 100644
index 00000000..4e18ce31
--- /dev/null
+++ b/powerjob-remote/pom.xml
@@ -0,0 +1,24 @@
+
+
+
+ powerjob
+ tech.powerjob
+ 3.0.0
+
+ 4.0.0
+ pom
+
+ powerjob-remote-framework
+
+
+ powerjob-remote
+
+
+ 8
+ 8
+ UTF-8
+
+
+
\ No newline at end of file
diff --git a/powerjob-remote/powerjob-remote-framework/pom.xml b/powerjob-remote/powerjob-remote-framework/pom.xml
new file mode 100644
index 00000000..df1512a3
--- /dev/null
+++ b/powerjob-remote/powerjob-remote-framework/pom.xml
@@ -0,0 +1,30 @@
+
+
+
+ powerjob-remote
+ tech.powerjob
+ 3.0.0
+
+ 4.0.0
+
+ powerjob-remote-framework
+
+
+ 8
+ 8
+ UTF-8
+
+ 4.2.0
+
+
+
+
+ tech.powerjob
+ powerjob-common
+ ${powerjob-common.version}
+
+
+
+
\ No newline at end of file
diff --git a/powerjob-remote/powerjob-remote-framework/src/main/java/tech/powerjob/remote/framework/actor/Actor.java b/powerjob-remote/powerjob-remote-framework/src/main/java/tech/powerjob/remote/framework/actor/Actor.java
new file mode 100644
index 00000000..419b3353
--- /dev/null
+++ b/powerjob-remote/powerjob-remote-framework/src/main/java/tech/powerjob/remote/framework/actor/Actor.java
@@ -0,0 +1,21 @@
+package tech.powerjob.remote.framework.actor;
+
+import java.lang.annotation.*;
+
+/**
+ * 行为处理器
+ *
+ * @author tjq
+ * @since 2022/12/31
+ */
+@Documented
+@Retention(RetentionPolicy.RUNTIME)
+@Target({ElementType.TYPE, ElementType.METHOD})
+public @interface Actor {
+
+ /**
+ * root path
+ * @return root path
+ */
+ String path();
+}
diff --git a/powerjob-remote/powerjob-remote-framework/src/main/java/tech/powerjob/remote/framework/actor/Handler.java b/powerjob-remote/powerjob-remote-framework/src/main/java/tech/powerjob/remote/framework/actor/Handler.java
new file mode 100644
index 00000000..4a4a220e
--- /dev/null
+++ b/powerjob-remote/powerjob-remote-framework/src/main/java/tech/powerjob/remote/framework/actor/Handler.java
@@ -0,0 +1,21 @@
+package tech.powerjob.remote.framework.actor;
+
+import java.lang.annotation.*;
+
+/**
+ * Handler
+ *
+ * @author tjq
+ * @since 2022/12/31
+ */
+@Documented
+@Retention(RetentionPolicy.RUNTIME)
+@Target({ElementType.TYPE, ElementType.METHOD})
+public @interface Handler {
+
+ /**
+ * handler path
+ * @return handler path
+ */
+ String path();
+}
diff --git a/powerjob-remote/powerjob-remote-framework/src/main/java/tech/powerjob/remote/framework/actor/HandlerInfo.java b/powerjob-remote/powerjob-remote-framework/src/main/java/tech/powerjob/remote/framework/actor/HandlerInfo.java
new file mode 100644
index 00000000..76c94c0a
--- /dev/null
+++ b/powerjob-remote/powerjob-remote-framework/src/main/java/tech/powerjob/remote/framework/actor/HandlerInfo.java
@@ -0,0 +1,25 @@
+package tech.powerjob.remote.framework.actor;
+
+import tech.powerjob.remote.framework.base.HandlerLocation;
+
+import java.io.Serializable;
+import java.lang.reflect.Method;
+
+/**
+ * HandlerInfo
+ *
+ * @author tjq
+ * @since 2022/12/31
+ */
+public class HandlerInfo implements Serializable {
+
+ private HandlerLocation location;
+ /**
+ * handler 对应的方法
+ */
+ private Method method;
+ /**
+ * actor 对象
+ */
+ private Object actor;
+}
diff --git a/powerjob-remote/powerjob-remote-framework/src/main/java/tech/powerjob/remote/framework/base/Address.java b/powerjob-remote/powerjob-remote-framework/src/main/java/tech/powerjob/remote/framework/base/Address.java
new file mode 100644
index 00000000..0ab57738
--- /dev/null
+++ b/powerjob-remote/powerjob-remote-framework/src/main/java/tech/powerjob/remote/framework/base/Address.java
@@ -0,0 +1,21 @@
+package tech.powerjob.remote.framework.base;
+
+import lombok.Getter;
+import lombok.Setter;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+
+/**
+ * 地址
+ *
+ * @author tjq
+ * @since 2022/12/31
+ */
+@Getter
+@Setter
+@Accessors(chain = true)
+public class Address implements Serializable {
+ private String host;
+ private int port;
+}
diff --git a/powerjob-remote/powerjob-remote-framework/src/main/java/tech/powerjob/remote/framework/base/HandlerLocation.java b/powerjob-remote/powerjob-remote-framework/src/main/java/tech/powerjob/remote/framework/base/HandlerLocation.java
new file mode 100644
index 00000000..0bffdadf
--- /dev/null
+++ b/powerjob-remote/powerjob-remote-framework/src/main/java/tech/powerjob/remote/framework/base/HandlerLocation.java
@@ -0,0 +1,27 @@
+package tech.powerjob.remote.framework.base;
+
+import lombok.Getter;
+import lombok.Setter;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+
+/**
+ * handler location
+ *
+ * @author tjq
+ * @since 2022/12/31
+ */
+@Getter
+@Setter
+@Accessors(chain = true)
+public class HandlerLocation implements Serializable {
+ /**
+ * 根路径
+ */
+ private String rootPath;
+ /**
+ * 方法路径
+ */
+ private String methodPath;
+}
diff --git a/powerjob-remote/powerjob-remote-framework/src/main/java/tech/powerjob/remote/framework/base/RemotingException.java b/powerjob-remote/powerjob-remote-framework/src/main/java/tech/powerjob/remote/framework/base/RemotingException.java
new file mode 100644
index 00000000..24de209b
--- /dev/null
+++ b/powerjob-remote/powerjob-remote-framework/src/main/java/tech/powerjob/remote/framework/base/RemotingException.java
@@ -0,0 +1,14 @@
+package tech.powerjob.remote.framework.base;
+
+import java.io.IOException;
+
+/**
+ * RemotingException
+ *
+ * @author tjq
+ * @since 2022/12/31
+ */
+public class RemotingException extends IOException {
+
+
+}
diff --git a/powerjob-remote/powerjob-remote-framework/src/main/java/tech/powerjob/remote/framework/base/URL.java b/powerjob-remote/powerjob-remote-framework/src/main/java/tech/powerjob/remote/framework/base/URL.java
new file mode 100644
index 00000000..98487800
--- /dev/null
+++ b/powerjob-remote/powerjob-remote-framework/src/main/java/tech/powerjob/remote/framework/base/URL.java
@@ -0,0 +1,21 @@
+package tech.powerjob.remote.framework.base;
+
+import java.io.Serializable;
+
+/**
+ * URL
+ *
+ * @author tjq
+ * @since 2022/12/31
+ */
+public class URL implements Serializable {
+ /**
+ * remote address
+ */
+ private Address address;
+
+ /**
+ * location
+ */
+ private HandlerLocation location;
+}
diff --git a/powerjob-remote/powerjob-remote-framework/src/main/java/tech/powerjob/remote/framework/cs/CSInitializer.java b/powerjob-remote/powerjob-remote-framework/src/main/java/tech/powerjob/remote/framework/cs/CSInitializer.java
new file mode 100644
index 00000000..421f4d6c
--- /dev/null
+++ b/powerjob-remote/powerjob-remote-framework/src/main/java/tech/powerjob/remote/framework/cs/CSInitializer.java
@@ -0,0 +1,34 @@
+package tech.powerjob.remote.framework.cs;
+
+import tech.powerjob.remote.framework.actor.HandlerInfo;
+import tech.powerjob.remote.framework.transporter.Transporter;
+
+import java.io.Closeable;
+import java.util.List;
+
+/**
+ * client & server initializer
+ *
+ * @author tjq
+ * @since 2022/12/31
+ */
+public interface CSInitializer extends Closeable {
+
+ /**
+ * initialize the framework
+ * @param config config
+ */
+ void init(CSInitializerConfig config);
+
+ /**
+ * build a Transporter by based network framework
+ * @return Transporter
+ */
+ Transporter buildTransporter();
+
+ /**
+ * bind Actor, publish handler's service
+ * @param handlerInfos handler infos
+ */
+ void bindHandlers(List handlerInfos);
+}
diff --git a/powerjob-remote/powerjob-remote-framework/src/main/java/tech/powerjob/remote/framework/cs/CSInitializerConfig.java b/powerjob-remote/powerjob-remote-framework/src/main/java/tech/powerjob/remote/framework/cs/CSInitializerConfig.java
new file mode 100644
index 00000000..a48a9078
--- /dev/null
+++ b/powerjob-remote/powerjob-remote-framework/src/main/java/tech/powerjob/remote/framework/cs/CSInitializerConfig.java
@@ -0,0 +1,22 @@
+package tech.powerjob.remote.framework.cs;
+
+import lombok.Getter;
+import lombok.Setter;
+import lombok.experimental.Accessors;
+import tech.powerjob.remote.framework.base.Address;
+
+import java.io.Serializable;
+
+/**
+ * CSInitializerConfig
+ *
+ * @author tjq
+ * @since 2022/12/31
+ */
+@Getter
+@Setter
+@Accessors(chain = true)
+public class CSInitializerConfig implements Serializable {
+
+ private Address bindAddress;
+}
diff --git a/powerjob-remote/powerjob-remote-framework/src/main/java/tech/powerjob/remote/framework/package-info.java b/powerjob-remote/powerjob-remote-framework/src/main/java/tech/powerjob/remote/framework/package-info.java
new file mode 100644
index 00000000..54f6fb30
--- /dev/null
+++ b/powerjob-remote/powerjob-remote-framework/src/main/java/tech/powerjob/remote/framework/package-info.java
@@ -0,0 +1,7 @@
+/**
+ * PowerJob 网络框架层
+ *
+ * @author tjq
+ * @since 2022/12/31
+ */
+package tech.powerjob.remote.framework;
\ No newline at end of file
diff --git a/powerjob-remote/powerjob-remote-framework/src/main/java/tech/powerjob/remote/framework/transporter/Protocol.java b/powerjob-remote/powerjob-remote-framework/src/main/java/tech/powerjob/remote/framework/transporter/Protocol.java
new file mode 100644
index 00000000..d014771f
--- /dev/null
+++ b/powerjob-remote/powerjob-remote-framework/src/main/java/tech/powerjob/remote/framework/transporter/Protocol.java
@@ -0,0 +1,16 @@
+package tech.powerjob.remote.framework.transporter;
+
+/**
+ * 通讯协议
+ *
+ * @author tjq
+ * @since 2022/12/31
+ */
+public interface Protocol {
+
+ /**
+ * 通讯协议名称
+ * @return 协议名称
+ */
+ String name();
+}
diff --git a/powerjob-remote/powerjob-remote-framework/src/main/java/tech/powerjob/remote/framework/transporter/Transporter.java b/powerjob-remote/powerjob-remote-framework/src/main/java/tech/powerjob/remote/framework/transporter/Transporter.java
new file mode 100644
index 00000000..be69945e
--- /dev/null
+++ b/powerjob-remote/powerjob-remote-framework/src/main/java/tech/powerjob/remote/framework/transporter/Transporter.java
@@ -0,0 +1,40 @@
+package tech.powerjob.remote.framework.transporter;
+
+import tech.powerjob.common.PowerSerializable;
+import tech.powerjob.remote.framework.base.RemotingException;
+import tech.powerjob.remote.framework.base.URL;
+
+import java.util.concurrent.CompletionStage;
+import java.util.concurrent.ExecutorService;
+
+/**
+ * 通讯器,封装与远程服务端交互逻辑
+ *
+ * @author tjq
+ * @since 2022/12/31
+ */
+public interface Transporter {
+
+ /**
+ * Protocol
+ * @return return protocol
+ */
+ Protocol getProtocol();
+
+ /**
+ *send message
+ * @param url url
+ * @param request request
+ */
+ void tell(URL url, PowerSerializable request);
+
+ /**
+ * ask by request
+ * @param url url
+ * @param request request
+ * @param executorService thread pool, null is acceptable
+ * @return CompletionStage
+ * @throws RemotingException remote exception
+ */
+ CompletionStage