线程内的http侦听器

时间:2009-11-24 15:49:39

标签: multithreading web-services httprequest

我正在编写一个必须能够回复多个http请求的Web服务。 据我所知,我需要处理HttpListener。 接收http请求(或更好的,多个http请求),翻译它并将结果发送回调用者的最佳方法是什么?在线程上使用HttpListeners有多安全?

由于

1 个答案:

答案 0 :(得分:2)

您通常会设置一个接受连接的主线程,并将请求传递给线程池中的新线程或空闲线程。我会说你现在正走在正确的轨道上。

你正在寻找类似的东西:

 while (boolProcessRequests)
            {
                HttpListenerContext context = null;
                    // this line blocks until a new request arrives
                   context = listener.GetContext();
                   Thread T = new Thread((new YourRequestProcessorClass(context)).ExecuteRequest);
                   T.Start();
         }

编辑详细说明如果您无权访问网络服务器并需要推送自己的网络服务,则可以使用以下结构:

一个接受连接/请求的主线程,一旦到达,就会将连接传递给免费威胁进行处理。有点像餐馆里的女主人,会把你送到服务员/女服务员处理你的请求。

在这种情况下,Hostess(主线程)有一个循环: - 在门口等待新来的人 - 找一张免费的桌子,让顾客坐在那里,并打电话给服务员处理请求。 - 回到门口等待。

在上面的代码中,请求被打包在HttpListernContext对象中。一旦它们到达,主线程就会创建一个新线程和一个使用请求数据(上下文)初始化的新RequestProcessor类。然后,RequsetProcessor使用上下文对象内的Response对象来响应请求。显然你需要创建YourRequestProcessorClass,并像线程一样运行ExecuteRequest。

我不确定您使用的是什么平台,但是您可以看到线程here和httplistener here的.Net示例。