From 0102d9669df9f99c6e5d95cb2b2092885d38b67d Mon Sep 17 00:00:00 2001 From: nova Date: Wed, 4 Nov 2020 19:36:09 +0800 Subject: [PATCH 1/5] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=86=85=E5=AE=B9?= =?UTF-8?q?=E9=AA=8C=E8=AF=81=E6=83=B3=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 02nio/nio02/pom.xml | 7 +- .../gateway/NettyServerApplication.java | 2 +- .../gateway/inbound/HttpInboundHandler.java | 18 +++-- .../okhttp/OkhttpOutboundHandler.java | 74 +++++++++++++++++++ .../java/java0/conc0301/DaemonThread.java | 3 +- .../java/java0/conc0301/sync/Counter.java | 2 +- 6 files changed, 97 insertions(+), 9 deletions(-) diff --git a/02nio/nio02/pom.xml b/02nio/nio02/pom.xml index 6cbbeffd..89d85cfe 100644 --- a/02nio/nio02/pom.xml +++ b/02nio/nio02/pom.xml @@ -52,7 +52,12 @@ httpasyncclient 4.1.4 - + + com.squareup.okhttp3 + okhttp + 3.8.1 + + okhttp header + Headers.Builder headersBuilder = new Headers.Builder(); + fullRequest.headers().forEach(stringStringEntry -> { + headersBuilder.add(stringStringEntry.getKey(), stringStringEntry.getValue()) + ; + }); + Headers headers = headersBuilder.build(); + + Request request = new Request.Builder() + .url(url) + .headers(headers) + .build(); + FullHttpResponse response = null; + try (Response endponitResponse = httpClient.newCall(request).execute()) { + if (!endponitResponse.isSuccessful()) throw new IOException("Unexpected code " + endponitResponse); + Headers responseHeaders = endponitResponse.headers(); + for (int i = 0; i < responseHeaders.size(); i++) { + System.out.println(responseHeaders.name(i) + ": " + responseHeaders.value(i)); + } +// System.out.println(endponitResponse.body().string()); + response = new DefaultFullHttpResponse(HTTP_1_1, OK, Unpooled.wrappedBuffer(endponitResponse.body().bytes())); + response.headers().set("Content-Type", "application/json"); + response.headers().setInt("Content-Length", Integer.parseInt(endponitResponse.headers().get("Content-Length"))); + } catch (IOException e){ + e.printStackTrace(); + response = new DefaultFullHttpResponse(HTTP_1_1, NO_CONTENT); + e.printStackTrace(); + ctx.close(); + } finally { + + if (fullRequest != null) { + if (!HttpUtil.isKeepAlive(fullRequest)) { + ctx.write(response).addListener(ChannelFutureListener.CLOSE); + } else { + //response.headers().set(CONNECTION, KEEP_ALIVE); + ctx.write(response); + } + } + ctx.flush(); + //ctx.close(); + } + } } diff --git a/03concurrency/0301/src/main/java/java0/conc0301/DaemonThread.java b/03concurrency/0301/src/main/java/java0/conc0301/DaemonThread.java index 8d985a55..db5666cb 100644 --- a/03concurrency/0301/src/main/java/java0/conc0301/DaemonThread.java +++ b/03concurrency/0301/src/main/java/java0/conc0301/DaemonThread.java @@ -2,7 +2,7 @@ public class DaemonThread { - public static void main(String[] args) { + public static void main(String[] args) throws InterruptedException { Runnable task = new Runnable() { @Override public void run() { @@ -19,6 +19,7 @@ public void run() { thread.setName("test-thread-1"); thread.setDaemon(true); thread.start(); + Thread.currentThread().sleep(6000); } diff --git a/03concurrency/0301/src/main/java/java0/conc0301/sync/Counter.java b/03concurrency/0301/src/main/java/java0/conc0301/sync/Counter.java index a066caf8..24cdfa1b 100644 --- a/03concurrency/0301/src/main/java/java0/conc0301/sync/Counter.java +++ b/03concurrency/0301/src/main/java/java0/conc0301/sync/Counter.java @@ -3,7 +3,7 @@ public class Counter { private int sum = 0; public void incr() { - sum++; + synchronized(this) {sum++;} } public int getSum() { return sum; From 5bad0a68dccf1a9bf31dacf2d571e7c52a4161fe Mon Sep 17 00:00:00 2001 From: nova Date: Wed, 4 Nov 2020 19:38:00 +0800 Subject: [PATCH 2/5] =?UTF-8?q?=E6=8F=90=E4=BA=A4nio=E4=BD=9C=E4=B8=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../kimmking/gateway/filter/HeaderRequestFilter.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 02nio/nio02/src/main/java/io/github/kimmking/gateway/filter/HeaderRequestFilter.java diff --git a/02nio/nio02/src/main/java/io/github/kimmking/gateway/filter/HeaderRequestFilter.java b/02nio/nio02/src/main/java/io/github/kimmking/gateway/filter/HeaderRequestFilter.java new file mode 100644 index 00000000..0020f3b3 --- /dev/null +++ b/02nio/nio02/src/main/java/io/github/kimmking/gateway/filter/HeaderRequestFilter.java @@ -0,0 +1,12 @@ +package io.github.kimmking.gateway.filter; + +import io.netty.channel.ChannelHandlerContext; +import io.netty.handler.codec.http.FullHttpRequest; + +public class HeaderRequestFilter implements HttpRequestFilter { + @Override + public void filter(FullHttpRequest fullRequest, ChannelHandlerContext ctx) { + // 在headers中增加一对属性 "nio:nova" + fullRequest.headers().add("nio","nova"); + } +} From 864816f69653b77a76c9926f985ea9121c8446d5 Mon Sep 17 00:00:00 2001 From: nova Date: Wed, 4 Nov 2020 19:50:19 +0800 Subject: [PATCH 3/5] =?UTF-8?q?=E5=A2=9E=E5=8A=A0nio=E4=BD=9C=E4=B8=9A?= =?UTF-8?q?=E7=9A=84=E8=AF=B4=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 02nio/nio02/README.md | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/02nio/nio02/README.md b/02nio/nio02/README.md index 82214410..f244b0dd 100644 --- a/02nio/nio02/README.md +++ b/02nio/nio02/README.md @@ -1,6 +1,9 @@ # netty-gateway -``` - +> 说明:由于本机环境问题,将项目的 proxyPort 修改为 9999 + +### 作业 + +- 第一题:使用OkHttp实现,修改了 HttpInboundHandler ,修改了 OkhttpOutboundHandler +- 第二题:修改了 HttpInboundHandler ,修改了 OkhttpOutboundHandler,增加 HeaderRequestFilter -``` \ No newline at end of file From c229a764d8f0791a981feefc9d366e5ad7bae9b3 Mon Sep 17 00:00:00 2001 From: nova Date: Sun, 8 Nov 2020 10:12:07 +0800 Subject: [PATCH 4/5] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../io/github/kimmking/gateway/filter/HeaderRequestFilter.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/02nio/nio02/src/main/java/io/github/kimmking/gateway/filter/HeaderRequestFilter.java b/02nio/nio02/src/main/java/io/github/kimmking/gateway/filter/HeaderRequestFilter.java index 0020f3b3..0c5a018c 100644 --- a/02nio/nio02/src/main/java/io/github/kimmking/gateway/filter/HeaderRequestFilter.java +++ b/02nio/nio02/src/main/java/io/github/kimmking/gateway/filter/HeaderRequestFilter.java @@ -6,7 +6,7 @@ public class HeaderRequestFilter implements HttpRequestFilter { @Override public void filter(FullHttpRequest fullRequest, ChannelHandlerContext ctx) { - // 在headers中增加一对属性 "nio:nova" + // 在headers中增加一对属性 "nio:nova" fullRequest.headers().add("nio","nova"); } } From 33a46cc83b30844ca914c0a035257c0834c1d133 Mon Sep 17 00:00:00 2001 From: nova Date: Wed, 11 Nov 2020 23:58:36 +0800 Subject: [PATCH 5/5] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E7=AC=AC=E5=9B=9B?= =?UTF-8?q?=E8=AF=BE=E4=BD=9C=E4=B8=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/java0/conc0303/Homework03.java | 24 ++++++++++++++----- 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/03concurrency/0301/src/main/java/java0/conc0303/Homework03.java b/03concurrency/0301/src/main/java/java0/conc0303/Homework03.java index 3e64fc85..d206de45 100644 --- a/03concurrency/0301/src/main/java/java0/conc0303/Homework03.java +++ b/03concurrency/0301/src/main/java/java0/conc0303/Homework03.java @@ -1,5 +1,9 @@ package java0.conc0303; +import java.util.concurrent.Callable; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.FutureTask; + /** * 本周作业:(必做)思考有多少种方式,在main函数启动一个新线程或线程池, * 异步运行一个方法,拿到这个方法的返回值后,退出主线程? @@ -9,17 +13,25 @@ */ public class Homework03 { - public static void main(String[] args) { - + public static void main(String[] args) throws InterruptedException, ExecutionException { + long start=System.currentTimeMillis(); + // 在这里创建一个线程或线程池, // 异步执行 下面方法 - - int result = sum(); //这是得到的返回值 - + + FutureTask task = new FutureTask(new Callable() { + @Override + public Integer call() throws Exception { + return sum(); + } + }); + + new Thread(task).start(); + int result = task.get(); + // 确保 拿到result 并输出 System.out.println("异步计算结果为:"+result); - System.out.println("使用时间:"+ (System.currentTimeMillis()-start) + " ms"); // 然后退出main线程