mirror of
https://github.com/yanfeizhang/coder-kung-fu.git
synced 2026-05-11 10:41:21 +08:00
feat: add test code of 1 million tcp connection
This commit is contained in:
15
tests/network/test03/php/Makefile
Normal file
15
tests/network/test03/php/Makefile
Normal file
@@ -0,0 +1,15 @@
|
||||
.PHONY: run-cli
|
||||
run-cli:
|
||||
sh tool.sh runcli
|
||||
|
||||
.PHONY: stop-cli
|
||||
stop-cli:
|
||||
sh tool.sh stopcli
|
||||
|
||||
.PHONY: run-srv
|
||||
run-srv:
|
||||
sh tool.sh runsrv
|
||||
|
||||
.PHONY: stop-srv
|
||||
stop-srv:
|
||||
sh tool.sh stopsrv
|
||||
64
tests/network/test03/php/client.php
Normal file
64
tests/network/test03/php/client.php
Normal file
@@ -0,0 +1,64 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Socket客户端
|
||||
*/
|
||||
|
||||
if(!isset($argv[1]) || !isset($argv[2])){
|
||||
echo "usage: php client.php {serverIp} {serverPort} \n";
|
||||
exit;
|
||||
}
|
||||
$serverIp = $argv[1];
|
||||
$serverPort = $argv[2];
|
||||
|
||||
$sockets = array();
|
||||
|
||||
function buildConnect($sIp,$sPort,$num){
|
||||
global $sockets;
|
||||
|
||||
for($i = 1; $i <= $num; $i++){
|
||||
if(0 == $i % 1000){
|
||||
echo " 连接 ".$sIp.":".$sPort." 成功了 ".$i." 条\n";
|
||||
sleep(1);
|
||||
}
|
||||
|
||||
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
|
||||
if($socket == false) {
|
||||
echo "$sPort socket_create() 失败,".socket_strerror(socket_last_error($socket))."\n";
|
||||
sleep(5);
|
||||
continue;
|
||||
}
|
||||
|
||||
if(false == socket_connect($socket, $sIp, $sPort)){
|
||||
echo "$sPort socket_connect() 失败的原因是:".socket_strerror(socket_last_error($socket))."\n";
|
||||
sleep(5);
|
||||
continue;
|
||||
}
|
||||
|
||||
//将 socket 保存起来,避免连接被内核释放
|
||||
$sockets[] = $socket;
|
||||
|
||||
//$wmsg = "I am client!";
|
||||
//socket_write($socket, $wmsg, strlen($wmsg));
|
||||
|
||||
//$rmsg = socket_read($socket, 1024);
|
||||
//echo "接收到的数据长度:".strlen($rmsg)."\n";
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function closeAll(){
|
||||
global $sockets;
|
||||
foreach($sockets as $socket){
|
||||
socket_close($socket);
|
||||
}
|
||||
}
|
||||
|
||||
echo "\nconnect start:";
|
||||
buildConnect($serverIp, $serverPort, 50000);
|
||||
|
||||
sleep(600);
|
||||
|
||||
echo "\nclose all sockets now";
|
||||
closeAll();
|
||||
50
tests/network/test03/php/server.php
Normal file
50
tests/network/test03/php/server.php
Normal file
@@ -0,0 +1,50 @@
|
||||
<?php
|
||||
/**
|
||||
* Socket服务端
|
||||
*/
|
||||
set_time_limit(0);
|
||||
|
||||
if(!isset($argv[1]) || !isset($argv[2])){
|
||||
echo "usage: php server.php {ip} {port}\n";
|
||||
exit;
|
||||
}
|
||||
$ip = $argv[1];
|
||||
$port = $argv[2];
|
||||
|
||||
if(($sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) < 0) {
|
||||
echo "socket_create() 失败的原因是:" . socket_strerror($sock) . "\n";
|
||||
exit();
|
||||
}
|
||||
|
||||
if(($ret = socket_bind($sock, $ip, $port)) < 0) {
|
||||
echo "socket_bind() 失败的原因是:" . socket_strerror($ret) . "\n";
|
||||
exit();
|
||||
}
|
||||
|
||||
if(($ret = socket_listen($sock,1024)) < 0) {
|
||||
echo "socket_listen() 失败的原因是:" . socket_strerror($ret) . "\n";
|
||||
exit();
|
||||
}
|
||||
echo "$ip $port listen ok!\n";
|
||||
|
||||
$sockets = array();
|
||||
$count = 0;
|
||||
do{
|
||||
//接收一个Socket连接
|
||||
$con = socket_accept($sock);
|
||||
if (false == $con) {
|
||||
echo "$ip $port socket_accept() failed: reason:".socket_strerror(socket_last_error($socket))."\n";
|
||||
continue;
|
||||
} else {
|
||||
echo "$ip $port accept success: ".$count++."\n";
|
||||
|
||||
//发送数据
|
||||
//$wmsg = "I am server\n";
|
||||
//socket_write($con, $wmsg, strlen($wmsg));
|
||||
|
||||
//接收数据
|
||||
//$rmsg = socket_read($msgsock[$count], 2048);
|
||||
//echo = "收到的信息:".$rmsg."\n";
|
||||
}
|
||||
$sockets[$count] = $con;
|
||||
}while(true);
|
||||
67
tests/network/test03/php/tool.sh
Normal file
67
tests/network/test03/php/tool.sh
Normal file
@@ -0,0 +1,67 @@
|
||||
#!/bin/bash
|
||||
|
||||
#--------------------------- begin -------------------------
|
||||
#注意:这一部分的内容需要根据你自己的实验环境来设置
|
||||
|
||||
#1.服务端的 IP
|
||||
#示例
|
||||
#SERVERIP="192.168.1.100"
|
||||
SERVERIP="192.168.1.100"
|
||||
|
||||
#2.服务端的端口
|
||||
SERVERPORTS=(
|
||||
"8100"
|
||||
"8101"
|
||||
"8102"
|
||||
"8103"
|
||||
"8104"
|
||||
"8105"
|
||||
"8106"
|
||||
"8107"
|
||||
"8108"
|
||||
"8109"
|
||||
"8110"
|
||||
"8111"
|
||||
"8112"
|
||||
"8113"
|
||||
"8114"
|
||||
"8115"
|
||||
"8116"
|
||||
"8117"
|
||||
"8118"
|
||||
"8119"
|
||||
)
|
||||
#--------------------------- end -------------------------
|
||||
|
||||
TYPE=$1
|
||||
|
||||
exec_runcli(){
|
||||
for i in "${!SERVERPORTS[@]}"; do
|
||||
echo php client.php $SERVERIP ${SERVERPORTS[$i]} &
|
||||
php client.php $SERVERIP ${SERVERPORTS[$i]} &
|
||||
done
|
||||
}
|
||||
|
||||
exec_stopcli(){
|
||||
ps -ef | grep client.php | awk '{print $2}' | xargs kill -9
|
||||
}
|
||||
|
||||
exec_runsrv(){
|
||||
for i in "${!SERVERPORTS[@]}"; do
|
||||
echo php server.php 0.0.0.0 ${SERVERPORTS[$i]} &
|
||||
php server.php 0.0.0.0 ${SERVERPORTS[$i]} &
|
||||
done
|
||||
}
|
||||
|
||||
exec_stopsrv(){
|
||||
ps -ef | grep server.php | awk '{print $2}' | xargs kill -9
|
||||
}
|
||||
|
||||
case $TYPE in
|
||||
"runcli") exec_runcli;;
|
||||
"stopcli") exec_stopcli;;
|
||||
"runsrv") exec_runsrv;;
|
||||
"stopsrv") exec_stopsrv;;
|
||||
*) echo "get unkown type $TYPE"; exit ;;
|
||||
esac
|
||||
|
||||
Reference in New Issue
Block a user