同步NSURLConnection和端口使用?

时间:2014-02-07 22:45:19

标签: ios nsurlconnection nsurlrequest

在iPad上,我使用NSURLRequest来轮询我的WLAN上的http服务器上的文件。我每秒都会读一次这个文件。我使用以下代码来读取文件。

NSURLRequest *request = [NSURLRequest requestWithURL:myURL
                                     cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData
                                     timeoutInterval:30.0];

// Get the data
NSURLResponse *response;
NSError *dataError;
NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&dataError ];

在服务器上运行netstat会显示以下网络活动(其中10.0.1.11是正在轮询服务器的iPad的IP地址:

  Proto  Local Address          Foreign Address        State
  TCP    10.0.1.16:80           10.0.1.11:56999        TIME_WAIT
  TCP    10.0.1.16:80           10.0.1.11:57010        TIME_WAIT
  TCP    10.0.1.16:80           10.0.1.11:57011        TIME_WAIT
  TCP    10.0.1.16:80           10.0.1.11:57012        TIME_WAIT
  TCP    10.0.1.16:80           10.0.1.11:57013        TIME_WAIT
  TCP    10.0.1.16:80           10.0.1.11:57014        TIME_WAIT
  TCP    10.0.1.16:80           10.0.1.11:57015        TIME_WAIT
  TCP    10.0.1.16:80           10.0.1.11:57016        TIME_WAIT
  TCP    10.0.1.16:80           10.0.1.11:57017        TIME_WAIT
  TCP    10.0.1.16:80           10.0.1.11:57018        TIME_WAIT
  TCP    10.0.1.16:80           10.0.1.11:57019        TIME_WAIT
  TCP    10.0.1.16:80           10.0.1.11:57020        TIME_WAIT
  TCP    10.0.1.16:80           10.0.1.11:57021        TIME_WAIT
  TCP    10.0.1.16:80           10.0.1.11:57022        ESTABLISHED

我是否应该担心iPad端有多个端口?在阅读之后我应该以某种方式“关闭”NSURLConnection吗?我正在使用ARC。

2 个答案:

答案 0 :(得分:1)

当你关闭一个端口时,它会进入TIME_WAIT一段时间,以确保不会再从另一端显示流量。它可以在几秒到几分钟内处于该状态,具体取决于实现。

它最终会成功,但是你会以这种方式在服务器和客户端上投入大量的开销。如果很多客户这样做,you can definitely overwhelm the server.

您不应每秒轮询使用新连接的服务器。您应该保持打开一个连接并在其上侦听来自服务器的新消息(这通常称为“长轮询”)。或者您可以重用与HTTP / 1.1的连接。在任何情况下,如果您深入了解网络,您几乎总是希望从NSURLConnection切换到AFNetworking,这样可以更好地支持管理这些类型的连接。

答案 1 :(得分:0)

实际上NSURLConnection将在请求结束后关闭。 你是在另一个线程中发送这些请求吗?

如果是,我相信你在netstat中看到的是与服务器的开放连接。似乎每个请求都需要更长的时间,所以第二个和第三个和第四个连接正在建立(等等)。