feat: add test code of 1 million tcp connection

This commit is contained in:
zhangyanfei
2021-02-22 19:21:21 +08:00
parent 85ccc4b792
commit 15bb23948f
27 changed files with 1268 additions and 133 deletions

View 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

View 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();

View 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);

View 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