【问题标题】:PHP TCP socket connection Limit - Windows serverPHP TCP 套接字连接限制 - Windows 服务器
【发布时间】:2016-05-01 19:02:41
【问题描述】:

我有一个奇怪的问题,我似乎找不到解决方案或任何更接近我遇到的问题的方法,

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

除了连接数不超过 256 个连接外,一切正常。

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

这里是脚本sn-p

<?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 "\r\n";

$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 "\r\n";

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

        //  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 "\r\n";
            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 + 运行 php 5.5.12 的 wamp 2.5

【问题讨论】:

标签: php windows sockets tcp server


【解决方案1】:

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

【讨论】:

  • 我实际上在 Azure 的 Windows 服务器上尝试了同样的事情,同样的事情!我应该寻找什么样的服务器来寻找任何规范或东西?
  • @DragonWarrior Get linux ;) 如果您不打算运行 IIS,Windows 对服务器来说是无用的。
猜你喜欢
  • 2015-09-29
  • 2012-06-13
  • 2015-09-10
  • 2017-03-06
  • 2015-05-15
  • 1970-01-01
  • 2014-01-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多