PHP TCP 套接字连接限制 - Windows 服务器
Posted
技术标签:
【中文标题】PHP TCP 套接字连接限制 - Windows 服务器【英文标题】:PHP TCP socket connection Limit - Windows server 【发布时间】: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
【问题讨论】:
这里是命令提示符的截图,prntscr.com/9ul9yh 很遗憾您没有点击您引用的文章底部的链接 - smallvoid.com/article/winnt-network-connection-limit.html 哥们,我确实做到了,我厌倦了添加提到的 D 字。但没用!我正在使用 Windows 8 作为服务器,你能帮忙吗? msdn.microsoft.com/en-us/library/ee377058%28v=bts.10%29.aspx 也用过这个 这是一篇不错的文章,您可以查看:smallvoid.com/article/winnt-tcpip-max-limit.html。 【参考方案1】:这与您的代码无关,它是 MS Windows 的“功能”,可以让您购买服务器版本(或升级到不同的操作系统)。 NT 内核的服务器版和桌面版在功能上没有区别(一些不同的优化调整),它只是确保您遵守许可条款的一种手段。
【讨论】:
我实际上在 Azure 的 Windows 服务器上尝试了同样的事情,同样的事情!我应该寻找什么样的服务器来寻找任何规范或东西? @DragonWarrior Get linux ;) 如果您不打算运行 IIS,Windows 对服务器来说是无用的。以上是关于PHP TCP 套接字连接限制 - Windows 服务器的主要内容,如果未能解决你的问题,请参考以下文章
TCP over Bluetooth(Windows 套接字)
升级到 Windows 10 后 net.tcp 无法正常工作