IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> php swoole TCP 服务器搭建及使用详解 -> 正文阅读

[PHP知识库]php swoole TCP 服务器搭建及使用详解

实现目标:

tcp客户端实现与swoole搭建的tcp服务端通信传输数据,客户端请求提交数据,服务端接收数据存入数据库及对数据库查询结果返回给tcp客户端

php swoole wiki参考文档地址

https://wiki.swoole.com/#/start/start_tcp_server

用到的模拟工具:sockettool

首先理解以下TCP工作的原理

TCP的“三次握手”

TCP的三次握手可以确保服务器和客户端之间可以正常通信。三次握手的过程:至于这个过程的解释,可以点击下面的链接来查看。

参考:https://blog.csdn.net/Loli_Tio/article/details/79374401

?

IP和PORT
服务器需要有一个IP,TCP通信时,还需要提供一个端口号。
客户端需要有一个IP,TCP通信时,也需要提供一个端口号。

个人理解:IP就是地址,可以理解为一个房子,当你需要建立通信的时候,首先肯定得相互知道这个房子在哪里才可以吧,要不然我们得信息发送到哪里呢?
PORT端口,端口号可以理解为这个房子的一个门,我们需要指定一个门,将消息从这个门里面传送进去或者从这个门接受消息。

php swoole 扩展的安装

参考:https://wiki.swoole.com/#/environment

启动服务器:

<?php
/*
 * $host :  监听ip地址
 * 本地地址设置为:127.0.0.1
 * 外网ip:192.168.12.10
 * 监听多个ip地址设置为:0.0.0.0(监听的是ipv4)ipv6自行去官网查询用法
 * $port  : 端口号
 * 设置为1024以下的端口号需要root权限
 * $mode :   SWOOLE_PROCESS 多进程的方式
 * $socke_type  : SWOOLE_SOCK_TCP
 *
 * */
//创建一个服务器
$host = '0.0.0.0';//string
$port = 9502;//int
//$serv = new swoole_server($host,$port,$mode,$socke_type);
//$serv = new swoole_server($host,$port);
$serv = new Swoole\Server($host,$port);
//使用服务
/*
 * bool $swoole_server->on(string $event,mixid $callback);
 * $event:
 * connect : 当建立连接时  $server :服务器信息 $fd :客户端信息
 * receive : 当接收数据时  $serv服务器信息$fd客户端信息$from_id:ID  $data:数据
 * close :   当关闭连接时  $serv服务器信息$fd客户端信息
 * */
$serv->set([
    //'open_eof_check' => true,
    //'open_eof_split' => true,
    //'package_eof' => "~",
    //'open_length_check'     => true,
    //'package_max_length'    => 8192000000000000000,
    //'package_length_type'   => 'N',
    //'package_length_offset' => 4,
    //'package_body_offset'   => 0
]);
$serv->on('connect',function($serv,$fd){
    //可以打印一下
    //var_dump($serv);
    //var_dump($fd);
    echo $fd.":建立连接\n";
    $serv->send($fd,"welcome!");
});
$serv->on('receive',function($serv,$fd,$from_id,$data){
    echo "接收到数据\n";
    //var_dump($fd);
    //echo $data;
    //$buffer = str_split(bin2hex($data),2);
    //var_dump($buffer);
    //我们通过tcp接收到的数据是ASCII码二进制字符串,这里转化成十六进制我们对接接口进行对应的处理转化信息处理
    $buffer = bin2hex($data);//二进制转化为十六进制
    
    echo $buffer;
    $get_str = str_replace(" ","",$buffer);
    
    
    

    //$result = pack("H*", $send_str);//将十六进制命令包组合成二进制包
    //$serv->send($fd, $result);

    //$str = pack("H*",$data);
    //var_dump($str);
    //var_dump(bin2hex($data));
    //$buffer = str_split(bin2hex($data),2);
    //var_dump($buffer);
    //echo "#{$serv->worker_id}>> received length=" . strlen($data) . "\n";
    //$serv->send($fd, $data);
    //$serv->send($fd,"aaa");
});
$serv->on('close',function($serv,$fd){
    echo "关闭连接\n";
});
//开启tcp服务器
$serv->start();
//将文件上传到搭建好的swoole服务器
//执行php tcp.php启动服务器
//查看tcp服务器是否正常运行命令:ps -ajft
//用网络调试工具测试是否正常
//注意关闭防火墙,确认tcp服务器开启成功

保存好文件就可以执行:php tcp.php启动服务器了

然后用工具模拟创建tcp客户端(测试好9502端口是否打开,或者关闭防火墙)?

可以模拟字符串的传输或者十六进制数据的传输。就可以进行对应的数据传输了。。。。。。

本次开发的疑惑点:

1、TCP传输的数据格式十六进制,接收到数据是ASCII码对应的二进制字符串

2、TCP服务器给客户端传输的数据也是要把十六进制打包(pack)成二进制ASCII码对应的字符串格式,参考pack()函数的用法

3、测试工具模拟发送十六进制的数据格式不要带空格例如:

7e0e9be09c0031020200000178588f2f1000013436303030353934343130373535340000000000000000000001785893a5a27e
  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2021-07-27 15:59:34  更:2021-07-27 15:59:44 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 2:08:24-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码