2016-06-07 91 views
1

重复从POCO GitHub的问题波科::网:: NoMessageException后HTTP/GET

我在建设使用波科一个简单的Web服务器的Visual Studio 2015年的Windows 10抬起几秒钟

A Poco :: Net :: NoMessageException在通过网络浏览器连接到此服务器之后会提升几秒(约15秒)。刷新页面后会再次发生;它在每次连接后都会这样做。

我没有在文档,论坛,stackoverflow中找到任何东西。在文件中描述如何/何时/为什么会出现这些来自图书馆内部的异常情况会很有帮助。

我也试过(只是为了好玩)在handleRequest(...)一个std::cout << req.getURI() << std::endl;并得到了从地址0x00000000一个内存访问冲突,在功能上没有其他的代码。

这是我的代码。 预处理器语句被省略。

MyApp.c

int main(int argc, char ** argv) 
{ 
    myHTTPServer server; 
    return server.run(argc, argv); 
} 

myHTTPRequestHandlerFactory

// Header 
class myHTTPRequestHandlerFactory : public HTTPRequestHandlerFactory 
{ 
    public: 
     virtual HTTPRequestHandler* createRequestHandler(const HTTPServerRequest&); 
}; 

// Code 
HTTPRequestHandler* myHTTPRequestHandlerFactory::createRequestHandler(const HTTPServerRequest& handler) { 
    return new myHTTPRequestHandler; 
} 

myHTTPRequestHandler

// Header 
class myHTTPRequestHandler : public HTTPRequestHandler 
{ 
    public: 
     virtual void handleRequest(HTTPServerRequest &, HTTPServerResponse &); 
}; 

// Code 
void myHTTPRequestHandler::handleRequest(HTTPServerRequest & request, HTTPServerResponse & response) { 
    response.setStatus(HTTPResponse::HTTP_OK); 
    //response.setContentLength(1024); 
    //response.setChunkedTransferEncoding(true); 
    std::ostream& out = response.send(); 
    out << "<html><head></head><body>POCO POCO POCO</body></html>"; 
    out.flush(); 
} 

myHTTPServer

// Header 
class myHTTPServer : public ServerApplication 
{ 
    protected: 
     int main(const std::vector<std::string>& v) { 
      HTTPServer server(new myHTTPRequestHandlerFactory, ServerSocket(80), new HTTPServerParams); 

      server.start(); 

      std::cout << "Server started" << std::endl; 

      waitForTerminationRequest(); 

      std::cout << "Server stopped" << std::endl; 

      server.stop(); 

      return Application::EXIT_OK; 
     } 
}; 

// No code in .c file 

谢谢你帮我出

回答

0

this answer,这是一个正常的POCO行为,提高波科::网:: NoMessageException例外的任何特殊理由,你应该safely ignore他们。

对于内存访问冲突,这是正常的,因为它不允许拨打在HTTPRequestHandler::handleRequest(...)

-1

我面临同样的问题,改变我处理的URL路由的方式之后。

我认为这可能是由于第二个请求自动发送Chrome:favicon。 在收到HTML内容后,浏览器再次询问服务器以获取花哨的选项卡图标(如果有的话)。确保你优雅地处理这样的请求,如果需要的话有404错误。

作为一般建议,将所有未知请求重定向到发送相关HTTP错误代码的处理程序,以确保您回复所有请求。

您还可以记录所有传入请求(至少在调试时,如果您不想记录敏感信息)并检查浏览器的开发工具部分以检查发送了哪些请求。 如果您未在http服务器上调用以https://开头的URL(在这种情况下可能发生额外的交换),则您的浏览器不应发送任何其他请求,而不将其记录在网络选项卡中。