swoole tcp服务端搭建与客户端访问:

本文介绍如何使用Swoole实现服务器监听与数据接收处理,结合Medoo进行数据库操作,实现订单信息查询及商户验证功能,并通过GuzzleHttp发送回调信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

require 'vendor/autoload.php';
use Medoo\Medoo;
//创建Server对象,监听 0.0.0.0:2345端口
$serv = new Swoole\Server("0.0.0.0", 2345);
//监听连接进入事件
$serv->on('Connect', function ($serv, $fd) {
    echo "Client: Connect.\n";
});
$database = new Medoo([
    'database_type' => 'mysql',
    'database_name' => 'huijie2',
    'server' => 'rm-j6cq11ejyk37q99xk90130.mysql.rds.aliyuncs.com',
    'username' => 'huijie2',
    'password' => 'hj2411327+',
    'prefix' => 'bz_',
    'charset' => 'utf8'
]);
//监听数据接收事件
$serv->on('Receive', function ($serv, $fd, $from_id, $data) use ($database){
    $sys_order_id=json_decode($data);
    $order_info = $database->get("trade", '*',[
        "sys_order_id" => $sys_order_id
    ]);
    $user_info = $database->get("user", ['secret_key'],["user_id[=]" => $order_info["user_id"]]);
    if(empty($order_info)){
        $serv->send($fd,"订单不存在);
    }
    if(empty($user_info)){
        $serv->send($fd,"商户不存在");
    }
    //组装给客户返回的数据
    $post_data['mer_id'] = $order_info['user_id'];    //商户ID
    $post_data['order_id'] = $order_info['user_order_id'];    //订单号
    $post_data['amount'] = $order_info['amount'];    //订单金额。单位:元
    $post_data['pay_state']=$order_info['pay_state'];//支付状态
    $post_data['sign'] = md5('amount='.$order_info['amount'].'&mer_id='.$order_info['user_id'].'&order_id='.$order_info['user_order_id'].'&pay_state='.$order_info['pay_state'].'&key='.$user_info['secret_key']);//签名
    $post_data['original_amount'] = $order_info['price'];//原始价格
    $post_data['attach'] = $order_info['attach'];    //备注信息
    $post_data['code']='200';
    //使用GuzzleHttp发送回调信息
    $client = new \GuzzleHttp\Client();
    //通过post来进行发送
    //此处为发送回调代码
});
//监听连接关闭事件
$serv->on('Close', function ($serv, $fd) {
    echo "Client: Close.\n";
});
//启动服务器
$serv->start();



客户端:

// 建立socket连接到内部推送端口
$client = stream_socket_client('tcp://地址:端口', $errno, $errmsg, 1);
// 推送的数据,包含uid字段,表示是给这个uid推送
$sys_order_id=json_encode($sys_order_id);
// 发送数据,注意5678端口是Text协议的端口,Text协议需要在数据末尾加上换行符
fwrite($client, $sys_order_id."\n");
// 读取推送结果
echo fread($client, 8192);
fclose($client);

或者

$client = new swoole_client(SWOOLE_SOCK_TCP);

if (!$client->connect('127.0.0.1', 9501, -1))

{

    exit("connect failed. Error: {$client->errCode}\n");

}

$client->send("hello world\n");

echo $client->recv();

$client->close();


 



 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值