pan111pan 2010-04-19 16:40
浏览 182
已采纳

http server的使用感受

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 = "come on baby";
t.sendResponseHeaders(200, response.length());
OutputStream os = t.getResponseBody();
os.write(response.getBytes());
os.close();
}
}

以上这段经典的入门代码,不知道有没大侠在改造时,对其进行过压力测试,
在本人的项目中,我发现HttpHandler对于请求的处理,是串行的。
也就是每处理完一个handle(HttpExchange t),才能接受一个新的请求。
在处理请求的过程中,对新的请求是处于阻塞状态
无法做到多线程的并发处理,这样也就压缩了其使用的范围。
请大家拍砖

  • 写回答

3条回答 默认 最新

  • xie2022228 2010-04-20 09:25
    关注

    [quote]但你试试 在handle中设一个断点,让它hold住 然后,再给它一个提交,看看提交能否有返回?
    我测试过是没有的,需要等到第1个提交的内容完成后,才去处理下一个提交[/quote]

    你的handle本身就是单线程的,它当然只能顺序处理多个请求。你需要在handle里面启动新的线程去处理得到的socket,这个线程的hold就不会影响其他的线程了。

    你的MyHandler应该启动多线程去处理,而不是自己处理。MyHandler现在是自己处理了。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 MapReduce结果输出到HBase,一直连接不上MySQL
  • ¥15 扩散模型sd.webui使用时报错“Nonetype”
  • ¥15 stm32流水灯+呼吸灯+外部中断按键
  • ¥15 将二维数组,按照假设的规定,如0/1/0 == "4",把对应列位置写成一个字符并打印输出该字符
  • ¥15 NX MCD仿真与博途通讯不了啥情况
  • ¥15 win11家庭中文版安装docker遇到Hyper-V启用失败解决办法整理
  • ¥15 gradio的web端页面格式不对的问题
  • ¥15 求大家看看Nonce如何配置
  • ¥15 Matlab怎么求解含参的二重积分?
  • ¥15 苹果手机突然连不上wifi了?