2009-11-24 81 views
1

我在写一个Web服务,它必须能够回复多个http请求。 从我的理解,我将需要处理HttpListener。 什么是最好的方法来接收一个http请求(或更好的,多个http请求),翻译它并将结果发回给调用者?在线程上使用HttpListeners有多安全?http内部监听器线程

感谢

+0

你正在使用哪个框架? .NET,Java,Rails,C++? – McKay 2009-11-24 15:52:21

+0

我使用vs2008与c# – phm 2009-11-24 16:35:57

回答

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(); 
     } 

编辑详细说明如果您没有访问到Web服务器,并需要推出自己的Web服务,你可以使用以下结构:

一个接受连接/请求的主线程,一旦它们到达,它就会将连接传递给一个免费威胁进程。有点像在一家餐厅的女主人,通过你的服务员/女服务员将处理您的请求。

在这种情况下,女主人(主线程)有一个循环: - 在门口等候新来港人士 - 找到一个免费的表,有座位的顾客和呼叫服务员来处理请求。 - 回到门口等。

在上面的代码中,请求打包在HttpListernContext对象中。一旦它们到达,主线程将创建一个新的线程和一个新的RequestProcessor类,并使用请求数据(上下文)进行初始化。 RequsetProcessor然后使用上下文对象内的Response对象来响应请求。很明显,您需要创建YourRequestProcessorClass和ExecuteRequest等函数,以便由线程运行。

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

+0

感谢您的答案。您能否提供关于整个流程逻辑的更多信息? – phm 2009-11-24 16:09:36

+0

@phm为了进一步简化,你也可以看看ParametereizedThreadStart来代替(new YourRequestProcessorClass(context))。ExecuteRequest位。 – MandoMando 2009-11-30 16:46:41

+0

谢谢。这是一个很好的信息 – phm 2009-11-30 16:56:55