Coder Social home page Coder Social logo

htty's Introduction

htty

简介

基于 netty4 的轻量级、易于扩展的 WEB 框架。

如果你感兴趣,请点 Star

特性

  • 依赖少,实现基本功能只需一个core依赖。
  • 使用方便、友好、扩展性强。
  • 自定义拦截器。
  • 自定义异常处理。
  • HTTPS 支持。
  • Cookie 支持。
  • Chunk 支持。
  • 基于注解的使用方式。

HelloWorld

创建一个 maven 项目,引入依赖:

<dependency>
    <groupId>com.github.cjqcn</groupId>
    <artifactId>htty-core</artifactId>
    <version>1.0.0</version>
</dependency>

启动程序:

public class HelloWorldServer {

    public static void main(String[] args) {
        HttyServerBuilder.builder("HelloWorldServer") 
                .setPort(8080)      
                .addHttyHandler(new HelloWorldHandler())  
                .build().start();
    }


    static class HelloWorldHandler implements HttyWorker {
        @Override
        public void handle(HttyRequest httyRequest, HttyResponse httyResponse) {
            httyResponse.sendString(OK, "hello world");
        }

        @Override
        public HttyMethod[] httpMethod() {
            return HttyMethod.ALL_HTTP_METHOD;
        }

        @Override
        public String path() {
            return "/hello";
        }
    }
}

run:

[2018-09-15 10:29:57.746] - [INFO] - [com.github.cjqcn.htty.core.BasicHttyServer:142] - [Method = start] - [Starting HTTP Service HelloWorldServer at address localhost/127.0.0.1:8080]
[2018-09-15 10:29:58.348] - [INFO] - [com.github.cjqcn.htty.core.BasicHttyServer:155] - [Method = start] - [Started HTTP Service HelloWorldServer at address /127.0.0.1:8080]

测试 :

curl -i "http://localhost:8080/hello"

HTTP/1.1 200 OK
content-type: text/plain; charset=utf-8
content-length: 11

hello world

注解使用

控制层:

@EnableHttyWorking(prefixPath = "/index")
public class IndexController {

	@HttyRequestMapping(httpMethod = HttyMethod.GET, path = "/hello")
	public void sayhello(HttyRequest httyRequest, HttyResponse httyResponse) {
		httyResponse.sendString(OK, "hello world!");
	}

	@HttyRequestMapping(httpMethod = HttyMethod.GET, path = "/welcome")
	public void welcome(HttyRequest httyRequest, HttyResponse httyResponse) {
		httyResponse.sendString(OK, "welcome to use Htty!");
	}

}

启动程序:

public class AnnotationServer {

	public static void main(String[] args) {
		Collection<HttyWorker> httyWorkers = new DefaultWorkBuildHelper()
				.scanAndBuild("com.github.cjqcn.htty.sample.annotation.work");
		HttyServerBuilder.builder("AnnotationServer")
				.setPort(8080)
				.addHttyHandler(httyWorkers)
				.build().start();
	}

}

更多例子

https://github.com/cjqCN/htty/tree/master/htty-sample

版本说明

  • v1.1.0
    • 内部优化
    • 自定义拦截器
    • 优雅关闭
  • v1.0.0
    • 基本框架

压测(待补充)

$ ab -n 10000000 -c 64 -k http://127.0.0.1:8080/hello
This is ApacheBench, Version 2.3 <$Revision: 1843412 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking 127.0.0.1 (be patient)
Completed 1000000 requests
Completed 2000000 requests
Completed 3000000 requests
Completed 4000000 requests
Completed 5000000 requests
Completed 6000000 requests
Completed 7000000 requests
Completed 8000000 requests
Completed 9000000 requests
Completed 10000000 requests
Finished 10000000 requests


Server Software:
Server Hostname:        127.0.0.1
Server Port:            8080

Document Path:          /hello
Document Length:        11 bytes

Concurrency Level:      64
Time taken for tests:   73.118 seconds
Complete requests:      10000000
Failed requests:        0
Keep-Alive requests:    10000000
Total transferred:      1150000000 bytes
HTML transferred:       110000000 bytes
Requests per second:    136765.38 [#/sec] (mean)
Time per request:       0.468 [ms] (mean)
Time per request:       0.007 [ms] (mean, across all concurrent requests)
Transfer rate:          15359.39 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.0      0       1
Processing:     0    0   0.5      0       6
Waiting:        0    0   0.5      0       6
Total:          0    0   0.5      0       7

Percentage of the requests served within a certain time (ms)
  50%      0
  66%      1
  75%      1
  80%      1
  90%      1
  95%      1
  98%      1
  99%      1
 100%      7 (longest request)

htty's People

Contributors

cjqcn avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

htty's Issues

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.