HttpListener异步问题

xiqinzhu 2013-09-01 01:54:04
想用HttpListener并发处理客户端的请求,用异步处理,但是发现会有阻塞

static void HandleRequest(IAsyncResult ar)
{
HttpListener listener = ar.AsyncState as HttpListener;
HttpListenerContext context = listener.EndGetContext(ar);
listener.BeginGetContext(new AsyncCallback(HandleRequest), listener);
HttpListenerResponse response = context.Response;

Thread.Sleep(1000);

using (StreamWriter sr = new StreamWriter(response.OutputStream))
{
sr.Write("OK");
}
response.Close();
}


因为服务端要处理请求,所以在返回前阻塞1秒,在阻塞前已经BeginGetContext了,按道理说,应该能够马上等待获取下一次的请求,但是测试发现,好像不能马上的接收下一个请求,大概1秒钟接收几个请求,这样处理的能力很低,麻烦各位帮忙看下问题出在哪里。

...全文
344 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
huangyewei1 2016-05-17
  • 打赏
  • 举报
回复
HttpListener 只支持win2003及xp吗?
人生导师 2013-09-02
  • 打赏
  • 举报
回复
  • 打赏
  • 举报
回复
你都sleep(1000)了,然后又说“大概1秒钟接收几个请求,这样处理的能力很低”,你想说HttpListener没有能异步处理吗?这说不通啊。 我只能认为是你自己对于“假设花费1秒钟”的运行结果自己无法理解。
xiqinzhu 2013-09-01
  • 打赏
  • 举报
回复
引用 2 楼 sp1234 的回复:
“因为服务端要处理请求,所以在返回前阻塞1秒” 这在我看来,就好对我说“因为我要吃饭了,所以我决定推迟吃饭时间”。我实在是看不懂。你为什么要阻塞1秒呢?
意思就是服务端需要对请求进行业务处理,假设花费1秒,我用sleep去模拟这1秒
  • 打赏
  • 举报
回复
“因为服务端要处理请求,所以在返回前阻塞1秒” 这在我看来,就好对我说“因为我要吃饭了,所以我决定推迟吃饭时间”。我实在是看不懂。你为什么要阻塞1秒呢?
  • 打赏
  • 举报
回复
引用 楼主 xiqinzhu 的回复:
因为服务端要处理请求,所以在返回前阻塞1秒,在阻塞前已经BeginGetContext了,按道理说,应该能够马上等待获取下一次的请求,但是测试发现,好像不能马上的接收下一个请求,大概1秒钟接收几个请求,这样处理的能力很低,麻烦各位帮忙看下问题出在哪里。
服务器处理请求,那么就直接请求好了。干么要写Sleep? 删除了Sleep,你1秒钟该处理多少请求仍然还是处理多少请求,不会因为存在或者删除Sleep而改变。

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧