为什么private var的值与NanoHTTPD中的局部变量值不同?

时间:2016-06-23 16:26:29

标签: android nanohttpd

在我看来,SELECT CD.company_id, CD.company_name, OD.officer_name, CO.officer_role FROM company_details CD INNER JOIN company_officer CO ON CD.company_id = CO.company_id INNER JOIN officer_details OD ON CO.officer_id = OD.officer_id WHERE CD.company_index='FTSE 100' AND OD.officer_resigned='0'; 的值和本地var private String uri的值在任何时候都是相同的。

但事实上,我测试了很多次,有时两个值不一样,为什么呢? NanoHTTPD发生了什么?

猜测

我想函数String newURI是进程public Response serve(IHTTPSession session)中的muilti线程, 不同的线程操作这两个值,所以有时uri和newURL有不同的值,对吗?

enter image description here

public class HttpServer extends NanoHTTPD

1 个答案:

答案 0 :(得分:0)

那是因为NanoHTTPD是多线程的。

每个客户端套接字都会产生一个跟踪特定IHTTPSession的线程,并最终调用NanoHTTPD#serve(IHTTPSession)。

这意味着如果您同时收到2个请求,则同时调用NanoHTTPD#serve(IHTTPSession)两次。 如果您对并发有任何了解,那么您已经知道自己做错了什么。

NanoHTTP的设计使您需要做的就是覆盖NanoHTTPD#serve(IHTTPSession),并且您可以使用Web服务器。 您并不打算在服务器中存储与会话相关的数据,因为显然服务器很可能在任何给定时间都有多个会话处于活动状态。

它的工作方式很快就会在v3.0.0中发生变化,因此它变得更加万无一失。