首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP - socket_accept保持浏览器无休止地加载

问PHP - socket_accept保持浏览器无休止地加载
EN

Stack Overflow用户
提问于 2014-02-25 00:11:54
回答 3查看 610关注 0票数 1

各位朋友:

我正在尝试用PHP编写一个简单的套接字示例。下面的代码看起来工作正常:

代码语言:javascript
复制
if(!($sock = socket_create(AF_INET, SOCK_STREAM, 0)))
{
    $errorcode = socket_last_error();
    $errormsg = socket_strerror($errorcode);

    die("Couldn't create socket: [$errorcode] $errormsg \n");
}

echo "Socket created \n";

// Bind the source address
if( !socket_bind($sock, "127.0.0.1" , 5000) )
{
    $errorcode = socket_last_error();
    $errormsg = socket_strerror($errorcode);

    die("Could not bind socket : [$errorcode] $errormsg \n");
}

echo "Socket bind OK \n";

if(!socket_listen ($sock , 10))
{
    $errorcode = socket_last_error();
    $errormsg = socket_strerror($errorcode);

    die("Could not listen on socket : [$errorcode] $errormsg \n");
}

echo "Socket listen OK \n";

echo "Waiting for incoming connections..... \n";

但是当我添加行$client = socket_accept($sock);作为下一步,我的应用程序保持在加载状态大约5分钟,并且失败了!

我研究了一些东西,但我找不到任何线索,更不用说解决方案了。

谢谢!

EN

回答 3

Stack Overflow用户

发布于 2014-02-25 00:20:08

来自socket_accept()的文档

如果没有挂起的连接,socket_accept()将阻塞,直到出现连接为止。

您是否有任何尝试连接到应用程序的内容?如果不这样做,socket_accept()最终会因为default_socket_timeout而超时。

票数 1
EN

Stack Overflow用户

发布于 2014-02-25 00:23:23

这些是来自我的一个工作套接字脚本的代码片段。它很简单,但你会抓住要点的。

它是一个阻塞调用,除非你这样做:

代码语言:javascript
复制
@socket_set_nonblock($sock);

然后循环不断地处理你的连接和它们发送的数据。

代码语言:javascript
复制
while(true){

    if(($newc = @socket_accept($sock)) !== false) {
        $con=1;
    }

    if($con==1){
        //There is a socket. Read data from it, write data to it or close it here:
        if($dataIn = socket_read($newc, 1024)){
            echo "Client: " . $dataIn  . "\r\n<BR>";
        }

        if($dataIn==""){
            socket_close($newc);
            return();
        }
    } 
sleep(1);
}
票数 0
EN

Stack Overflow用户

发布于 2014-04-30 11:07:27

尝试在CLI上运行脚本。应该像你想要的那样工作。在浏览器上运行它最终会导致超时。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21992927

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档