php soecket服务器搭建_php搭建swooleTCP服务器

这次的swoole学习,比较缓慢

也由于这些几天事比较多,晚上没去学习,swoole的笔记也一直在没编写,下面简单介绍和应用下swoole

swoole是什么?

异步、并行、高性能

纯C编写

php扩展

swoole能做什么?

异步多线程服务器及客户端

异步MySQL、Reids、数据库连接池、任务队列

http/websocket服务器/客户端

异步文件读写

Swoole2.0支持协程

Swolle 实践

swoole手册:https://wiki.swoole.com/wiki/page/1.html

服务器版本:centos7/ubuntu16

php版本:5.4+

一、swoole安装(百度上有很多安装文章,也可以用宝塔直接安装)

二、简单TCP服务器创建

/**@创建TCP服务器

* 作者:生生

*/

$host = '127.0.0.1';//监听对应外网的IP 0.0.0.0监听所有ip

$port = 9501;  //端口号(1024以下端口需要root权限)

$mode = SWOOLE_PROCESS;//SWOOLE_PROCESS 进程模式-多进程方式

$socke_type= SWOOLE_SOCK_TCP;//SWOOLE_SOCK_TCP 服务器类型-默认TCP

$serv = new swoole_server($host,$port); //后面2参数不写是默认

/**@

* 函数:bool $swoole_server->on(string $event,miexd $callback);

* $event

* connect:当建立链接的时候(2个默认参数:$serv-服务器信息,$fd-客户信息 /-名字随意)

* receive:当接收数据的时候(4个默认参数:$serv-同上,$fd-同上,$from_id-客户id,$data-传递数据)

* close:关闭链接

*/

//@作用:监听链接进入事件

$serv->on('connect',function($serv,$fd){

echo '链接成功';

});

//@作用:监听数据接收事件

$serv->on('receive',function($serv,$fd,$from_id,$data){

var_dump($fd.'--'.$data);

/**@

* 函数:bool Server->send(mixed $fd, string $data, int $serverSocket = -1);

* 作用:向客户端发送数据

* 参数:

* $fd,客户端的文件描述符

*$data,发送的数据,TCP协议最大不得超过2M,可修改 buffer_output_size 改变允许发送的最大包长度

*$serverSocket,向Unix Socket DGRAM对端发送数据时需要此项参数,TCP客户端不需要填写

*/

$serv->send($fd,"数据:".$data);

});

//@作用:监听链接关闭事件

$serv->on('close',function($ser,$fd){

echo '关闭链接';

});

//启动服务

$serv->start();

三、运行上面php文件

1、浏览器直接访问会提示:Fatal error: Swoole\Server::__construct(): swoole_server only can be used in PHP CLI mode. in /www/jzj/public/aa.php on line 7

这个文件需要用php CLI模式(php命令行模式运行: php -f 运行文件名.php)

2、如果命令行运行的时候出现这个错误说明,端口被占用,

查看被占用的端口PID:sudo lsof -i:9501

kill掉进程:sudo kill -9 PID(在运行php -f 运行文件名.php)

四、创建TCP同步客户端(TP5举例)

namespace app\admin\controller;

use think\Controller;

use think\Db;

use Redis;

use swoole_client;

class Index extends controller

{

//客户端swoole

public function swoole()

{

$client = new swoole_client(SWOOLE_SOCK_TCP);

//连接到服务器

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

{

die("connect failed.");

}

//向服务器发送数据

if (!$client->send("hello world"))

{

echo '发送失败';

}

//从服务器接收数据

$data = $client->recv();

if (!$data)

{

die("recv failed.");

}

echo $data;

//关闭连接

$client->close();

}

}

注意客户端服务器在框架中要引入

把这个文件上传到服务器项目中,浏览器访问这个后如果报错如下:是因为服务端没有send发送数据出来问题

服务端会出现send为空,要注意很可能是$serv->on中的第一个参数不对,

如图:这个参数一定要是对应的new的对象

在重新运行文件:命令行会出现这个,

这样就完成了简单的tcp服务器与同步tcp客户端的搭建,当tcp服务器文件运行完成后删除也不影响(建议保留)

简单流程是:编写TCP服务器文件->运行服务器文件->TCP服务器创建成功->创建TCP客户端文件->运行与服务端(向服务端发送数据并接受服务端返回信息)

当然这篇只是简单的搭建与了解swoole,后续还会更新简单的swoole的php异步操作与实时聊天功能

本人也是新手,swoole是很强大的扩展,里面包含很多知识我也在学习中

想要探讨swoole或者其他问题可以关注博客园:传说中的生生或+Q:876036823一起交流

-----生生的笔记

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值