Tôi có một vấn đề kỳ lạ và tôi dường như không thể tìm ra giải pháp hoặc bất cứ điều gì gần gũi hơn với những vấn đề tôi đang gặp khó,PHP kết nối socket TCP Giới hạn - Windows server
Đây là điều, tôi có một kịch bản scoket chạy qua php trên dòng lệnh, nó chấp nhận kết nối và đọc dữ liệu ở định dạng json từ ứng dụng khách di động và gửi phản hồi thích hợp trong json.
Mọi thứ hoạt động tốt ngoại trừ số lượng kết nối không vượt quá 256 kết nối.
Tôi muốn biết tại sao điều đó lại xảy ra và làm thế nào tôi có thể giải quyết nó? Tôi đã được nó trên rất nhiều ngày, nhưng không có may mắn!
Dưới đây là đoạn mã script
<?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 .: Điều gì tôi đã làm là, tìm kiếm mở rộng về chủ đề này, và đã đi qua bài viết như thế này, http://smallvoid.com/article/winnt-tcpip-max-limit.html và hai hàng chục người khác.
Tôi có một cửa sổ 7 chạy điều này + wamp 2.5 mà chạy php 5.5.12
Đây là ảnh chụp màn hình của dấu nhắc lệnh, http://prntscr.com/9ul9yh –
Xấu hổ bạn không theo liên kết ở cuối bài viết bạn đã trích dẫn - http://smallvoid.com/article/winnt- network-connection-limit.html – symcbean
buddy, tôi đã thực sự và tôi mệt mỏi khi thêm các từ D đã đề cập. nhưng không sử dụng! Tôi đang sử dụng windows 8 như một máy chủ, bạn có thể giúp đỡ? –