package com.yang; import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetSocketAddress; import com.sun.net.httpserver.HttpExchange;
import com.sun.net.httpserver.HttpHandler;
import com.sun.net.httpserver.HttpServer; public class MyHTTPServer { public static void main(String[] args) {
try {
HttpServer hs = HttpServer.create(new InetSocketAddress(8888), 0);// 设置HttpServer的端口为8888
hs.createContext("/yang", new MyHandler());// 用MyHandler类内处理到//hujun的请求
hs.setExecutor(null); // creates a default executor
hs.start();
}
catch (Exception e) {
e.printStackTrace();
}
}
} class MyHandler implements HttpHandler { public void handle(HttpExchange t) throws IOException {
InputStream is = t.getRequestBody();
String response = "<font color='#ff0000'>come on baby</font>";
t.sendResponseHeaders(200, response.length());
OutputStream os = t.getResponseBody();
os.write(response.getBytes());
os.close();
}
} 以上这段经典的入门代码,不知道有没大侠在改造时,对其进行过压力测试,
在本人的项目中,我发现HttpHandler对于请求的处理,是串行的。
也就是每处理完一个handle(HttpExchange t),才能接受一个新的请求。
在处理请求的过程中,对新的请求是处于阻塞状态 .
无法做到多线程的并发处理,这样也就压缩了其使用的范围。
测试方式 在handle方法中设一个断点,让它hold住 然后,再给它一个提交,看看提交能否有返回?
我测试过是没有的,需要等到第1个提交的内容完成后,才去处理下一个提交。 请大家试试
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetSocketAddress; import com.sun.net.httpserver.HttpExchange;
import com.sun.net.httpserver.HttpHandler;
import com.sun.net.httpserver.HttpServer; public class MyHTTPServer { public static void main(String[] args) {
try {
HttpServer hs = HttpServer.create(new InetSocketAddress(8888), 0);// 设置HttpServer的端口为8888
hs.createContext("/yang", new MyHandler());// 用MyHandler类内处理到//hujun的请求
hs.setExecutor(null); // creates a default executor
hs.start();
}
catch (Exception e) {
e.printStackTrace();
}
}
} class MyHandler implements HttpHandler { public void handle(HttpExchange t) throws IOException {
InputStream is = t.getRequestBody();
String response = "<font color='#ff0000'>come on baby</font>";
t.sendResponseHeaders(200, response.length());
OutputStream os = t.getResponseBody();
os.write(response.getBytes());
os.close();
}
} 以上这段经典的入门代码,不知道有没大侠在改造时,对其进行过压力测试,
在本人的项目中,我发现HttpHandler对于请求的处理,是串行的。
也就是每处理完一个handle(HttpExchange t),才能接受一个新的请求。
在处理请求的过程中,对新的请求是处于阻塞状态 .
无法做到多线程的并发处理,这样也就压缩了其使用的范围。
测试方式 在handle方法中设一个断点,让它hold住 然后,再给它一个提交,看看提交能否有返回?
我测试过是没有的,需要等到第1个提交的内容完成后,才去处理下一个提交。 请大家试试
解决方案 »
- netbeans中自己编写的代码,运行后窗口是中文,但是菜单变成了方块
- 对象和对象变量的问题
- 如何理解Class类的实体的概念?
- String str = "Help me";//小弟初许JAVA,问些String的基础问题
- 关于打包 jar 自动生成的 MANIFEST文件
- 十万火急!高分求助一java界面问题
- Borland Optimizeit Suite 不会用啊!哪位高手可以指点一下啊?(先谢了!)
- 一个求任意数的阶乘的问题 高分求助
- scjp考试分数线变了??
- 怎么样在UI上动态改变表格的行数?
- 如何设计父类使得每个子类都继承并重写父类的一个static方法?
- 【求助】Java 启动参数增加splash参数问题
hs.setExecutor(null);
这意味着对消息的处理和新连接的接受(accept)是在同一个线程中处理的,处理是基于事件多路分离的串行方式,所以一个消息的处理要在上一个消息处理完之后才进行;而且如果有新连接连入,接受连接的操作也要和消息处理同步(串行)进行。在这种情况下要求你handler中的操作要尽快完成,才能同时应对多个连接。你如果想用多个线程并行处理多个消息,要给setExecutor传入一个线程池Executor,但也不一定是一个连接一个线程,可能是少数线程应对多数连接。