php实现tcp连接的原理,PHP实现TCP实例
NotifyService.php
class NotifyService extends Model
{
private static $client;
private static $redis;
/**
* 初始化
*/
protected static function initial()
{
$url = 'tcp://' . config('ctrl_service.host') . ':' . config('ctrl_service.port');
self::$client = @stream_socket_client($url, $errno, $errmsg, 1);
if (!self::$client) {
return false;
}
return true;
}
/**
* redis连接
* 接口并发量较高的时候容易造成TIMEWAIT过多
* 尽量避免多次进行连接
*/
private static function redisConnect()
{
// 判断是否使用redis 做缓存 如果有连接过
// if (config('cache.type') == 'redis') {
// // redis 连接 判断是否有已经连接过
// $cache = Cache::init();
// // 获取缓存对象句柄
// $handler = $cache->handler();
// self::$redis = $handler;
// return;
// }
self::$redis = new Redis();
$host = Env::get('redis.host', '127.0.0.1'); // redis 主机ip
$port = Env::get('redis.port', 6379); // redis 端口
$password = Env::get('redis.password', '123456'); // redis 密码
$select = Env::get('cache.select', 0); // 数据库
// 第一个参数为redis服务器的ip,第二个为端口
// self::$redis->connect($host, $port);
self::$redis->pconnect($host, $port);
self::$redis->auth($password); //密码验证
self::$redis->select($select); //选择数据库
}
/**
* redis断开
*/
public static function redisClose()
{
self::$redis->close();
}
/**
* app 通知
*/
public static function appNotify($content, $uid = 0)
{
if (!self::initial()) {
return false;
}
$post_data = [
'cmd' => 1010,
'type' => 'notice',
'uid' => (int) $uid,
'msgid' => 88, // 88是于客户端约定的标识
'content' => json_encode($content),
'loopcount' => 1,
'gid' => 0,
'roomno' => 0,
'interval' => 1,
];
return self::sendMsg($post_data);
}
/**
* 发送消息给控制服转发到游服
*/
public static function sendMsg($data)
{
// 添加一层外壳转发
$msg = [
'content' => $data,
'type' => 'forwarding',
];
$msg = json_encode($msg);
$msg .= "n";
return fwrite(self::$client, $msg);
}
/**
* 通知中间件配置相关
*/
public static function middleNoticeConfigInit($data, $redis_subscribe = 'middle_config')
{
self::redisConnect();
$data = json_encode($data);
$res = self::$redis->publish($redis_subscribe, $data);
self::redisClose();
}
}
NotifyService::appNotify([‘type’ => ‘other_close’], $uid);
// 通知中间件重新获取配置
NotifyService::middleNoticeConfigInit([‘type’ => ‘init_robot_uids’]);
php实现tcp连接的原理,PHP实现TCP实例相关推荐
- TCP连接断开原理剖析
TCP连接三次握手 TCP协议在双方建立连接的时候需要三次握手, 所谓的三次握手即TCP连接的建立.这个连接必须是一方主动打开,另一方被动打开的.以下为客户端主动发起连接的图解: 其中比较重要的字段有 ...
- 5.3 计算机网络传输层之TCP协议(tcp协议特点、tcp报文段首部格式、tcp连接---三次握手、tcp连接释放---四次握手)
文章目录 1.TCP协议特点 2.TCP报文段的首部格式 3.TCP连接管理 (1)连接的建立 - - - 三次握手 (2)SYN泛洪攻击 4.TCP连接释放----四次握手 5.TCP连接建立和释放 ...
- 《计算机网络》实验报告——使用SNORT观察网络数据包和TCP连接
实验名称:使用SNORT观察网络数据包和TCP连接 实验地点: 所使用的工具软件及环境: Windows ,snort.winpcap 一.实验目的: 通过本实验,熟悉SNORT的使用,通过抓包分析, ...
- TCP协议-TCP连接管理
一.TCP概述 TCP协议是 TCP/IP 协议族中一个非常重要的协议.它是一种面向连接.提供可靠服务.面向字节流的传输层通信协议. TCP(Transmission Control Protocol ...
- 拔掉网线后, 原本的 TCP 连接还存在吗?
大家好,我是小林. 今天,聊一个有趣的问题:拔掉网线几秒,再插回去,原本的 TCP 连接还存在吗? 可能有的同学会说,网线都被拔掉了,那说明物理层被断开了,那在上层的传输层理应也会断开,所以原本的 T ...
- TCP协议:拔掉网线后, 原本的 TCP 连接还存在吗?
问题描述 今天,聊一个有趣的问题:拔掉网线几秒,再插回去,原本的 TCP 连接还存在吗? 可能有人会说,网线都被拔掉了,那说明物理层被断开了,那在上层的运输层理应也会断开,所以原本的 TCP 连接就不 ...
- 计算机网络—网络原理之<TCP/IP 五层协议 >图解+详述
网络原理之 TCP/IP 五层协议 应用层 举个例子: 自定义应用层协议的两个步骤: 常见的应用层协议 传输层 UDP UDP 特点: TCP TCP协议的主要机制 1. 确认应答 2. 超时重传 T ...
- 原本的 TCP 连接,被拔掉网线后还存在吗?
网线都被拔掉了,那说明物理层被断开了,那在上层的传输层理应也会断开,所以原本的 TCP 连接就不会存在的了.就好像, 我们拨打有线电话的时候,如果某一方的电话线被拔了,那么本次通话就彻底断了. 真的是 ...
- 客户端拔掉网线后,会直接影响 TCP 连接状态吗?
大家好,我是小林. 今天,聊一个有趣的问题:拔掉网线几秒,再插回去,原本的 TCP 连接还存在吗? 可能有的同学会说,网线都被拔掉了,那说明物理层被断开了,那在上层的传输层理应也会断开,所以原本的 T ...
最新文章
- 怎么查看这个历史最大连接session数
- graphpad柱状图怎么加图例_如何用Graphpad prism添加多个图例
- 在线人员统计系统php,PHP统计当前在线人数 - 案例源码
- sharepoint2010 SP1 chrome 时常无滚动条
- Leet Code OJ 125. Valid Palindrome [Difficulty: Easy]
- 无人机目标定位C++程序
- 《HTML5与CSS3实战指南》——第2章 HTML5样式的标记2.1 The HTML5 Herald简介
- 白萝卜梨汤止咳防感冒
- 在DevStack中使用Systemd
- 基于jQuery或Zepto实现实时监控用户浏览信息
- python爬取股票历史数据_爬取股票历史数据并绘制K线图
- 【生信技能树】【miRNA】学习笔记(一)
- 5个高质量平面设计素材网站
- 【转】你真的理解Python中MRO算法吗?
- 图深度学习 Deep Learning on Graph
- 测试之全流程质量保证
- 机器人轨迹规划(熊友伦)
- 推荐学习方法——费曼技巧,以教促学,教学相长
- Sentinel-1 SAR数据与精密轨道数据下载
- 用 texstudio, 外部 pdf 浏览器查看可以正常显示中文, 但是内置的 pdf 浏览器不能显示中文?
热门文章
- Java 解析URL
- 四川大学java语言程序设计_四川大学2014年计算机(软件)学院Java语言设计期末考试B卷程序.doc...
- 【课题总结】OpenCV 抠图项目实战(12)源程序代码
- mysql如何查看表拥有的键_如何查看表或列的所有外键?
- python读取两个csv文件后比较_python – 读取两个csv文件并比较每一行.如果行匹配打印两行,如果不相似则打印无效...
- php issign为false,支付宝接口集成及错误排除
- 数据结构-栈1-顺序存储
- 【文章】鱼那么信任水, 水却煮了鱼!
- PHP 常用设计模式 (转载)
- NFS服务端安装与配置