swoole 建立socket通信
来源:互联网 发布:iptv机顶盒装软件 编辑:程序博客网 时间:2024/05/20 06:07
准备:
编译swoole的php扩展
开始:
建立tcp服务:
$server = new swoole_server('0.0.0.0',9502);$server->set([ 'heartbeat_check_interval' => 20,//心跳检测间隔时间(秒) 'heartbeat_idle_time' => 60*60,//client 未响应超时时间(秒) 'daemonize' => true,//守护进程 'worker_num'=>2,//同时工作的进程数量 'task_worker_num'=>10,//task数量(执行耗时任务) 'log_file' => '/Swoole/ws.log']);
监听连接
/** * 连接事件监听 */$server->on('Connect',function($server,$fd){ echo "tcp connect($fd) +1 \n";});
监听断开连接
/** * 监听连接断开事件 */$server->on('Close',function ($server,$fd){ echo "close tcp connect($fd) -1 \n";});
监听消息接收事件
/** * 监听获取消息事件 */$server->on('Receive',function ($server,$fd,$fromId,$data){ echo "onReceiver data: $data \n"; $server->task($data);});
监听task任务事件
//耗时长的程序应该在此处执行$server->on('Task',function ($server,$task_id,$from_id,$data){ echo "task is finished \n";// **数据库连接池** static $link = null; if($link == null){ $link = mysqli_connect("localhost","root","airlink8577","airlink_new"); } if(!$link){ $link = null; $server->finish("ERR:".mysqli_error($link)); return ; } $server->finish("OK:");});
任务完成监听事件(与task成对存在)
$server->on("finish",function ($server,$task_id,$data){ echo "finish task $data \n";});
连接池(redis)
//多进程之间不能共享数据,否则会出现tak使用的数据的来源不确定是哪一个fd$server->on("WorkerStart",function ($serv,$work_id){ $redis = new Redis(); $redis->connect("127.0.0.1",6379); $serv->redis = $redis; //redis的连接与数据库连接不同,redis可以建立多个连接而不影响其性能,mysql的连接数量增加会影响数据库的性能,所以这里限制mysql的连接数量,通过复用数据库的连接来提高数据库的性能});
数据库断线重连
socket连接的server端是常驻内存的,mysql连接在一段时间之内如果没有出现数据传输的情况会导致该连接与数据库断开,再次使用该连接的时候会导致报错,使用断线重连,在出现连接错误的情况下重新建立连接
/** * @return mysqli mysql重连 */function reconnectMysql(){ $link = mysqli_connect("localhost","user","pwd","db"); return $link;}function sqlQuery($sql,&$link){//mysql 断线重连机制 if(!$link->query($sql)){ var_dump(mysqli_error($link)); if(mysqli_errno($link)=='2006'||mysqli_errno($link)=='2013'){ $link = reconnectMysql(); sqlQuery($sql,$link); } }}
数据库连接等待超时时间设置:
mysql> show variables like '%timeout%'; //查看超时时间的设置set interactive_timeout=604800; //修改超时时间set wait_timeout=604800; //修改超时时间设置(主要改这个)
基础知识参考:
1、socket;
2、进程和线程优缺点;
3、进程间通信,管道通信;
4、进程间通信,共享内存;
阅读全文
0 0
- swoole 建立socket通信
- android socket通信建立
- Swoole库PHP的SOCKET通信引擎,TCP/UDP,SOCKET服务器
- 网络通信之swoole
- windows mobile建立gprs的socket通信
- socket建立服务端和客户端之间通信
- unity中建立 Socket 简单通信
- 基于tornado的简单socket通信建立
- 安卓使用socket建立通信
- Java socket报文通信(一)socket的建立
- java socket报文通信(一) socket的建立
- Java socket报文通信(一)socket的建立
- C语言socket()函数:建立一个socket通信
- Java socket报文通信(一)socket的建立
- swoole实现socket服务器初探
- 如何在Mobile平台建立GPRS连接进行SOCKET通信
- API SOCKET基础(一) TCP建立连接并通信
- API SOCKET基础(一) TCP建立连接并通信
- E
- 我眼中的产品经理(2)
- MFC之CAsyncSocket详解
- SQLi labs 第五课练习(爆错注入法)
- CSU-ACM2017暑假集训比赛1 C
- swoole 建立socket通信
- 计算机视觉
- 基于Spring可扩展Schema提供自定义配置支持
- margin,border,padding
- SpringBoot集成Redis来实现缓存技术方案
- shell变量概念
- Hibernate面试题
- DS:稀疏矩阵-三元组表
- Activity以弹出框的方式显示