加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP TCP套接字连接限制 – Windows服务器

发布时间:2020-12-13 13:19:35 所属栏目:PHP教程 来源:网络整理
导读:我有一个奇怪的问题,我似乎无法找到解决方案或更接近我遇到的问题, 这是事情,我有一个通过php在命令行上运行的scoket脚本,它接受连接并从移动应用程序客户端读取json格式的数据,并在json中发送适当的响应. 一切正常,但连接数不超过256连接. 我想知道为什么会
我有一个奇怪的问题,我似乎无法找到解决方案或更接近我遇到的问题,

这是事情,我有一个通过php在命令行上运行的scoket脚本,它接受连接并从移动应用程序客户端读取json格式的数据,并在json中发送适当的响应.

一切正常,但连接数不超过256连接.

我想知道为什么会这样,我该如何解决呢?我已经这么多天了,但没有运气!

这是脚本片段

<?php

date_default_timezone_set("UTC");
$server = stream_socket_server("tcp://192.168.1.77:25003",$errno,$errorMessage);

if (!$server) {
    die("$errstr ($errno)");
}

echo "Server started..";
echo "rn";

$client_socks = array();

while (true) {
    //prepare readable sockets
    $read_socks = $client_socks;
    $read_socks[] = $server;

    //start reading and use a large timeout
    if (!stream_select ($read_socks,$write,$except,10000)) {
        die('something went wrong while selecting');
    }

    //new client
    if (in_array($server,$read_socks)) {
        $new_client = stream_socket_accept($server);

        if ($new_client) {
            //print remote client information,ip and port number
            echo 'Connection accepted from ' . stream_socket_get_name($new_client,true);
            echo "rn";

            $client_socks[] = $new_client;
            echo "Now there are total ". count($client_socks) . " clients";
            echo "rn";
        }        

        //  echo stream_socket_get_name($new_client,true);
        //delete the server socket from the read sockets
        unset($read_socks[array_search($server,$read_socks)]);
    }

    $data = '';
    $res = '';

    //message from existing client
    foreach($read_socks as $sock) {
        stream_set_timeout($sock,1000); 
        while($resp = fread($sock,25000)) {
           $data .= $resp;
           if (strpos($data,"n") !== false) {
                break;
            }
        }

        $info = stream_get_meta_data($sock);    

        if ($info['timed_out']) {
            unset($client_socks[array_search($sock,$client_socks)]);
            @fclose($sock);  
            echo 'Connection timed out!';
            continue;
        }       

        $client = stream_socket_get_name($sock,true);

        if (!$data) {
            unset($client_socks[array_search($sock,$client_socks)]);
            @fclose($sock);           

            echo "$client got disconnected";
            echo "rn";
            continue;
        }

        //send the message back to client
        $decode = json_decode($data);


        $encode = json_encode($res);   
        fwrite($sock,$encode."n");      
    } 
}

P.S.:我所做的是,广泛搜索这个主题,然后翻过这些文章,
http://smallvoid.com/article/winnt-tcpip-max-limit.html和其他两十几个人.

我有一个Windows 7运行这个东西wamp 2.5运行PHP 5.5.12

它与您的代码无关,它是MS Windows的“功能”,可让您购买服务器版本(或升级到其他操作系统).功能上,NT内核的服务器和桌面版本之间没有区别(一些不同的优化调整),这只是确保您遵守许可条款的一种方法.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读