Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php NSURLConnection非封闭流_Php_Objective C_Sockets_Nsurlconnection_Inputstream - Fatal编程技术网

Php NSURLConnection非封闭流

Php NSURLConnection非封闭流,php,objective-c,sockets,nsurlconnection,inputstream,Php,Objective C,Sockets,Nsurlconnection,Inputstream,我有一个PHP服务器,看起来与此类似: header('Content-Type: text/plain; charset=utf-8'); header('Content-Encoding: none;'); //disable apache compressed ob_end_flush(); ob_start(); set_time_limit(0); error_reporting(0); while(true){ echo ++$i.PHP_EOL; ob_fl

我有一个PHP服务器,看起来与此类似:

header('Content-Type: text/plain; charset=utf-8');
header('Content-Encoding: none;'); //disable apache compressed

ob_end_flush();
ob_start();
set_time_limit(0);
error_reporting(0);

while(true){

    echo ++$i.PHP_EOL;

    ob_flush();
    flush();

    usleep(250 * 1000);

}
此服务器从不关闭连接,并且每四分之一秒刷新一个递增的数字。在浏览器中打开此页面时,它工作正常,并且在页面仍处于加载状态时内容会增加。此页面通过HTTP提供服务

尝试1,强烈希望开始工作

我还有一个类,它是一个NSURLConnection,超时设置为0,它根本不应该有超时。该类使用NSURLConnectionLegate协议收集数据;每当服务器发送数据时,就会触发函数-voidconnection:NSURLConnection*connection didReceiveData:NSData*data。这在连接关闭后工作得很好;如果要发送大量数据,可以非常准确地跟踪进度

然而,就我而言,连接并没有关闭,而且永远不会关闭。尽管如此,我还是希望每次冲水都能得到通知。目前,根本没有方法激发。当我将PHP脚本设置为在一段时间后终止,并且连接关闭时,就会触发data received方法

因此我想知道:是否有一种方法可以通知每一次数据传输

尝试2

我的下一次尝试是使用NSInputStreams。我是这样开始的:

self.iStream = [[NSInputStream alloc] initWithURL:[NSURL URLWithString:@"http://localhost/secuchat/lab/socket_test.php"]];
[self.iStream setDelegate:self];
[self.iStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[self.iStream open];
然而,遗憾的是,在这里,函数-voidstream:NSStream*aStream handleEvent:nsstreamventeventcode从未被激发


最后,我真的更愿意使用第一种方法让它工作,因为我希望能够使用POST发送一些数据,与已经提供该功能的库相比,原始套接字会使它变得更加困难。

我猜客户端使用了一个大的缓冲区,例如8kB,在缓冲区满之前,您不会收到任何消息。我不知道是否有可能设置缓冲区的大小,但这可能值得一试。

我只是好奇,为什么不让你的应用程序在预定的计时器上请求数据,而不是让你的PHP以无限周期发送数据?因为在3G连接上,我不希望它一直向服务器发送请求。我认为拥有一个开放的套接字和推送更新将是一个更优雅的解决方案,尽管它目前在服务器端并不十分优雅。我必须承认,我尝试了其中一些建议,但运气不太好,但可能值得仔细研究一下。@Rob:服务器端确实有效。我在不同的浏览器中测试了它,它每0.25秒刷新一次。iOS客户端不能真正工作。