Browse Source

add magician framework (#6564)

* test martian

* martian

* martian

* add readme.md

* edit dockerfile

* edit dockerfile

* edit dockerfile

* test martian

* test martian

* test martian

* test martian

* test martian

* test martian

* test martian

* add martian

* update martian

* update martian

* update martian

* update martian

* update martian

* update martian

* update martian

* update martian

* update martian

* update martian

* update martian

* update martian

* update martian

* update martian

* update martian

* update martian

* update martian

* update martian

* update martian

* add magician framework

* add magician framework

* add magician framework

* add magician framework

* add magician framework

* add magician framework

* add magician framework

* update martian
俞晔 4 years ago
parent
commit
a2c074a6bb

+ 15 - 0
frameworks/Java/magician-io/README.md

@@ -0,0 +1,15 @@
+## Magician Benchmarking Test
+
+This is Magician's official website address[http://magician-io.com](http://magician-io.com)
+
+## Versions
+
+- Java OpenJDK 1.8
+- Martian 3.2.13
+
+##Test URLs
+### JSON Encoding Test
+http://localhost:8080/json
+
+### Plaintext Encoding Test
+http://localhost:8080/plaintext

+ 24 - 0
frameworks/Java/magician-io/benchmark_config.json

@@ -0,0 +1,24 @@
+{
+  "framework": "magician",
+  "tests": [{
+    "default": {
+      "json_url": "/json",
+      "plaintext_url": "/plaintext",
+      "port": 8080,
+      "approach": "Realistic",
+      "classification": "Platform",
+      "database": "None",
+      "framework": "magician",
+      "language": "Java",
+      "flavor": "None",
+      "orm": "None",
+      "platform": "magician",
+      "webserver": "None",
+      "os": "Linux",
+      "database_os": "Linux",
+      "display_name": "magician-io",
+      "notes": "magician io",
+      "versus": "magician"
+    }
+  }]
+}

+ 14 - 0
frameworks/Java/magician-io/magician.dockerfile

@@ -0,0 +1,14 @@
+FROM maven:3.6.1-jdk-11-slim as maven
+WORKDIR /magician-io
+COPY pom.xml pom.xml
+COPY src src
+RUN mvn package -q
+
+FROM openjdk:11.0.3-jdk-slim
+WORKDIR /magician-io
+COPY --from=maven /magician-io/target/magician-io.jar magician-io.jar
+COPY --from=maven /magician-io/target/lib lib
+
+EXPOSE 8080
+
+CMD ["java", "-jar", "magician-io.jar"]

+ 74 - 0
frameworks/Java/magician-io/pom.xml

@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <groupId>org.example</groupId>
+    <artifactId>magician-io</artifactId>
+    <version>1.0-SNAPSHOT</version>
+
+    <properties>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <maven.compiler.source>11</maven.compiler.source>
+        <maven.compiler.target>11</maven.compiler.target>
+    </properties>
+
+    <dependencies>
+        <dependency>
+            <groupId>com.github.yuyenews</groupId>
+            <artifactId>Magician</artifactId>
+            <version>1.1.7</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>fastjson</artifactId>
+            <version>1.2.76</version>
+        </dependency>
+
+
+        <!-- 这个是日志包,支持任意可以跟slf4j桥接的包 -->
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-jdk14</artifactId>
+            <version>1.7.12</version>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-jar-plugin</artifactId>
+                <configuration>
+                    <finalName>magician-io</finalName>
+                    <archive>
+                        <manifest>
+                            <mainClass>com.test.io.Start</mainClass>
+                            <addClasspath>true</addClasspath>
+                            <classpathPrefix>./lib/</classpathPrefix>
+                            <useUniqueVersions>false</useUniqueVersions>
+                        </manifest>
+                    </archive>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-dependency-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>copy</id>
+                        <phase>package</phase>
+                        <goals>
+                            <goal>copy-dependencies</goal>
+                        </goals>
+                        <configuration>
+                            <outputDirectory>${project.build.directory}/lib</outputDirectory>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+</project>

+ 31 - 0
frameworks/Java/magician-io/src/main/java/com/test/io/Start.java

@@ -0,0 +1,31 @@
+package com.test.io;
+
+import com.test.io.handler.JsonHandler;
+import com.test.io.handler.TextHandler;
+import io.magician.Magician;
+import io.magician.common.event.EventGroup;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.concurrent.Executors;
+
+public class Start {
+
+    private static Logger logger = LoggerFactory.getLogger(Start.class);
+
+    public static void main(String[] args) {
+        try {
+
+            EventGroup ioEventGroup = new EventGroup(1, Executors.newCachedThreadPool());
+            EventGroup workerEventGroup = new EventGroup(10, Executors.newCachedThreadPool());
+
+            Magician.createTCPServer(ioEventGroup, workerEventGroup)
+                    .handler("/json", new JsonHandler())
+                    .handler("/plaintext", new TextHandler())
+                    .bind(8080, 10000);
+
+        } catch (Exception e){
+            logger.error("启动服务出现异常", e);
+        }
+    }
+}

+ 28 - 0
frameworks/Java/magician-io/src/main/java/com/test/io/handler/JsonHandler.java

@@ -0,0 +1,28 @@
+package com.test.io.handler;
+
+import com.alibaba.fastjson.JSON;
+import com.test.io.vo.MessageVO;
+import io.magician.tcp.codec.impl.http.request.MagicianRequest;
+import io.magician.tcp.handler.MagicianHandler;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.Locale;
+
+public class JsonHandler implements MagicianHandler<MagicianRequest> {
+
+    private SimpleDateFormat simpleDateFormat = new SimpleDateFormat("E, dd MMM yyyy H:m:s z", Locale.US);
+
+    @Override
+    public void request(MagicianRequest magicianRequest) {
+        String str = simpleDateFormat.format(new Date());
+
+        MessageVO messageVO = new MessageVO();
+        messageVO.setMessage("Hello, World!");
+
+        magicianRequest.getResponse()
+                .setResponseHeader("Server","magician")
+                .setResponseHeader("Date", str)
+                .sendJson(200, JSON.toJSONString(messageVO));
+    }
+}

+ 23 - 0
frameworks/Java/magician-io/src/main/java/com/test/io/handler/TextHandler.java

@@ -0,0 +1,23 @@
+package com.test.io.handler;
+
+import io.magician.tcp.codec.impl.http.request.MagicianRequest;
+import io.magician.tcp.handler.MagicianHandler;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.Locale;
+
+public class TextHandler implements MagicianHandler<MagicianRequest> {
+
+    private SimpleDateFormat simpleDateFormat = new SimpleDateFormat("E, dd MMM yyyy H:m:s z", Locale.US);
+
+    @Override
+    public void request(MagicianRequest magicianRequest) {
+        String str = simpleDateFormat.format(new Date());
+
+        magicianRequest.getResponse()
+                .setResponseHeader("Server","magician")
+                .setResponseHeader("Date", str)
+                .sendText(200, "Hello, World!");
+    }
+}

+ 14 - 0
frameworks/Java/magician-io/src/main/java/com/test/io/vo/MessageVO.java

@@ -0,0 +1,14 @@
+package com.test.io.vo;
+
+public class MessageVO {
+
+    private String message;
+
+    public String getMessage() {
+        return message;
+    }
+
+    public void setMessage(String message) {
+        this.message = message;
+    }
+}

+ 2 - 2
frameworks/Java/martian/pom.xml

@@ -17,8 +17,8 @@
         <!-- 这个包为框架的启动器 -->
         <dependency>
             <groupId>com.github.yuyenews</groupId>
-            <artifactId>mars-starter</artifactId>
-            <version>3.3.3</version>
+            <artifactId>Martian</artifactId>
+            <version>4.0.2</version>
         </dependency>
 
         <!-- 下面的jar包为日志框架,必须引入,否则控制台看不到任何信息,此处以jdk日志为例 -->

+ 4 - 2
frameworks/Java/martian/src/main/java/com/text/Start.java

@@ -1,11 +1,13 @@
 package com.text;
 
-import com.mars.start.StartMars;
+import com.martian.annotation.MartianScan;
+import com.martian.starter.StartMartian;
 import com.text.config.TestConfig;
 
+@MartianScan(scanPackage = "com.text.api")
 public class Start {
 
     public static void main(String[] args) {
-        StartMars.start(Start.class, new TestConfig());
+        StartMartian.start(Start.class, new TestConfig());
     }
 }

+ 22 - 5
frameworks/Java/martian/src/main/java/com/text/api/TestApi.java

@@ -1,11 +1,28 @@
 package com.text.api;
 
-import com.mars.common.annotation.api.MarsApi;
-import com.mars.server.server.request.HttpMarsResponse;
+import com.magician.web.core.annotation.Route;
 import com.text.api.vo.MessageVO;
+import io.magician.tcp.codec.impl.http.request.MagicianRequest;
 
-@MarsApi(refBean = "testService")
-public interface TestApi {
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.Locale;
 
-    MessageVO json(HttpMarsResponse response);
+public class TestApi {
+
+    private SimpleDateFormat simpleDateFormat = new SimpleDateFormat("E, dd MMM yyyy H:m:s z", Locale.US);
+
+    @Route("/json")
+    public MessageVO json(MagicianRequest request){
+
+        String str = simpleDateFormat.format(new Date());
+
+        request.getResponse()
+                .setResponseHeader("Server","Martian")
+                .setResponseHeader("Date", str);
+
+        MessageVO messageVO = new MessageVO();
+        messageVO.setMessage("Hello, World!");
+        return messageVO;
+    }
 }

+ 7 - 12
frameworks/Java/martian/src/main/java/com/text/config/TestConfig.java

@@ -1,24 +1,19 @@
 package com.text.config;
 
-import com.mars.common.base.config.MarsConfig;
-import com.mars.common.base.config.model.ThreadPoolConfig;
+import com.martian.config.MartianConfig;
+import io.magician.common.event.EventGroup;
 
-public class TestConfig extends MarsConfig {
+import java.util.concurrent.Executors;
+
+public class TestConfig extends MartianConfig {
 
     @Override
     public int port() {
         return 8080;
     }
 
-
-
     @Override
-    public ThreadPoolConfig threadPoolConfig() {
-        ThreadPoolConfig threadPoolConfig = new ThreadPoolConfig();
-        threadPoolConfig.setCorePoolSize(200);
-        threadPoolConfig.setMaxPoolSize(10000000);
-        threadPoolConfig.setKeepAliveTime(20);
-        threadPoolConfig.setBackLog(2000);
-        return threadPoolConfig;
+    public EventGroup workerEventGroup() {
+        return new EventGroup(10, Executors.newCachedThreadPool());
     }
 }

+ 0 - 38
frameworks/Java/martian/src/main/java/com/text/service/TestService.java

@@ -1,38 +0,0 @@
-package com.text.service;
-
-import com.mars.aio.constant.HttpConstant;
-import com.mars.aio.server.impl.MarsHttpExchange;
-import com.mars.common.annotation.bean.MarsBean;
-import com.mars.server.server.request.HttpMarsResponse;
-import com.text.api.vo.MessageVO;
-
-import java.text.SimpleDateFormat;
-import java.util.Date;
-import java.util.Locale;
-
-@MarsBean
-public class TestService {
-
-    private SimpleDateFormat simpleDateFormat = new SimpleDateFormat("E, dd MMM yyyy H:m:s z", Locale.US);
-
-    public MessageVO json(HttpMarsResponse response){
-        /*
-            Because this is a purely front-end and back-end separation framework,
-            the response header will include cross-domain by default.
-            In order to adapt to the tfb test, these default headers are removed here.
-         */
-        response.geNativeResponse(MarsHttpExchange.class).getResponseHeaders().clear();
-
-        // Add the header required by tfb
-        String str = simpleDateFormat.format(new Date());
-
-        response.setHeader("Content-Type", HttpConstant.RESPONSE_CONTENT_TYPE);
-        response.setHeader("Server","Martian");
-        response.setHeader("Date", str);
-
-
-        MessageVO messageVO = new MessageVO();
-        messageVO.setMessage("Hello, World!");
-        return messageVO;
-    }
-}