php tcp服务器多线程,PHP能否使用pthreads做socket客户端和服务端能互相通信?

最近在看负载均衡的几台机器共享session,用ini配置+memcache实现

无意中点击到PHP的socket,无聊的我想看看怎么不用workerman实现socket

如下图:

bVbrY3M?w=835&h=516

由于不是fgets(STDIN)阻塞就是socket_read阻塞

我没办法做到两个命令行又能输入也能一直监听socket_read的情况

请问我如果单这两个脚本而言加上PHP的多线程做一个聊天室那样的功能?

还有为啥我多开一个命令行窗口php client.php无法监听socket端口了?一个端口只能一个server和一个client?

附上两个PHP脚本,嘿嘿,

//获取tcp协议号码。

$tcp = getprotobyname("tcp");

// 建立server端socket ,创建并返回一个套接字,也称作一个通讯节点。

$socket = socket_create(AF_INET, SOCK_STREAM, $tcp);

// socket_set_nonblock($socket);

//绑定要监听的ip和端口,这里绑定的ip一定要写局域网ip,写成127.0.0.1客户端将无法与服务端建议连接。

socket_bind($socket, '192.168.171.68', 9999);

//监听端口

socket_listen($socket);

// 接受客户端请求过来的一个socket连接

$connection = socket_accept($socket);

//初始化一个数据,和客户端通信

while (true) {

$send_data = trim(fgets(STDIN));

if($send_data){

// 向客户端传递一个信息数据

socket_write($connection,$send_data);

}else{

// 监听客户端

$data = @socket_read($connection, 1024, PHP_BINARY_READ);

if($data){

printf("from client: " . $data . "\n");

}

}

// echo 'loop'.PHP_EOL;

//关闭 socket

// socket_close($connection);

}

?>

客户端:

// 建立客户端的socet连接

$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);

// socket_set_nonblock($socket);

//连接服务器端socket

$connection = socket_connect($socket, '192.168.171.68', 9999);

$line = fopen('php://stdin','r');

while (true) {

// echo 'start'.PHP_EOL;

if(ftell(STDIN)===0){

// 将客户的信息写到通道中,传给服务器端

// echo 'listening'.PHP_EOL;

$send_data = fgets($line);

socket_write($socket, $send_data);

}else{

//输出服务端的相应

// echo 'reading'.PHP_EOL;

$buffer = socket_read($socket, 1024, PHP_BINARY_READ);

if($buffer){

//服务端传来的信息

echo "server:" . $buffer . PHP_EOL;

}

}

// echo 'loop'.PHP_EOL;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值