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实例相关推荐

  1. TCP连接断开原理剖析

    TCP连接三次握手 TCP协议在双方建立连接的时候需要三次握手, 所谓的三次握手即TCP连接的建立.这个连接必须是一方主动打开,另一方被动打开的.以下为客户端主动发起连接的图解: 其中比较重要的字段有 ...

  2. 5.3 计算机网络传输层之TCP协议(tcp协议特点、tcp报文段首部格式、tcp连接---三次握手、tcp连接释放---四次握手)

    文章目录 1.TCP协议特点 2.TCP报文段的首部格式 3.TCP连接管理 (1)连接的建立 - - - 三次握手 (2)SYN泛洪攻击 4.TCP连接释放----四次握手 5.TCP连接建立和释放 ...

  3. 《计算机网络》实验报告——使用SNORT观察网络数据包和TCP连接

    实验名称:使用SNORT观察网络数据包和TCP连接 实验地点: 所使用的工具软件及环境: Windows ,snort.winpcap 一.实验目的: 通过本实验,熟悉SNORT的使用,通过抓包分析, ...

  4. TCP协议-TCP连接管理

    一.TCP概述 TCP协议是 TCP/IP 协议族中一个非常重要的协议.它是一种面向连接.提供可靠服务.面向字节流的传输层通信协议. TCP(Transmission Control Protocol ...

  5. 拔掉网线后, 原本的 TCP 连接还存在吗?

    大家好,我是小林. 今天,聊一个有趣的问题:拔掉网线几秒,再插回去,原本的 TCP 连接还存在吗? 可能有的同学会说,网线都被拔掉了,那说明物理层被断开了,那在上层的传输层理应也会断开,所以原本的 T ...

  6. TCP协议:拔掉网线后, 原本的 TCP 连接还存在吗?

    问题描述 今天,聊一个有趣的问题:拔掉网线几秒,再插回去,原本的 TCP 连接还存在吗? 可能有人会说,网线都被拔掉了,那说明物理层被断开了,那在上层的运输层理应也会断开,所以原本的 TCP 连接就不 ...

  7. 计算机网络—网络原理之<TCP/IP 五层协议 >图解+详述

    网络原理之 TCP/IP 五层协议 应用层 举个例子: 自定义应用层协议的两个步骤: 常见的应用层协议 传输层 UDP UDP 特点: TCP TCP协议的主要机制 1. 确认应答 2. 超时重传 T ...

  8. 原本的 TCP 连接,被拔掉网线后还存在吗?

    网线都被拔掉了,那说明物理层被断开了,那在上层的传输层理应也会断开,所以原本的 TCP 连接就不会存在的了.就好像, 我们拨打有线电话的时候,如果某一方的电话线被拔了,那么本次通话就彻底断了. 真的是 ...

  9. 客户端拔掉网线后,会直接影响 TCP 连接状态吗?

    大家好,我是小林. 今天,聊一个有趣的问题:拔掉网线几秒,再插回去,原本的 TCP 连接还存在吗? 可能有的同学会说,网线都被拔掉了,那说明物理层被断开了,那在上层的传输层理应也会断开,所以原本的 T ...

最新文章

  1. 怎么查看这个历史最大连接session数
  2. graphpad柱状图怎么加图例_如何用Graphpad prism添加多个图例
  3. 在线人员统计系统php,PHP统计当前在线人数 - 案例源码
  4. sharepoint2010 SP1 chrome 时常无滚动条
  5. Leet Code OJ 125. Valid Palindrome [Difficulty: Easy]
  6. 无人机目标定位C++程序
  7. 《HTML5与CSS3实战指南》——第2章 HTML5样式的标记2.1 The HTML5 Herald简介
  8. 白萝卜梨汤止咳防感冒
  9. 在DevStack中使用Systemd
  10. 基于jQuery或Zepto实现实时监控用户浏览信息
  11. python爬取股票历史数据_爬取股票历史数据并绘制K线图
  12. 【生信技能树】【miRNA】学习笔记(一)
  13. 5个高质量平面设计素材网站
  14. 【转】你真的理解Python中MRO算法吗?
  15. 图深度学习 Deep Learning on Graph
  16. 测试之全流程质量保证
  17. 机器人轨迹规划(熊友伦)
  18. 推荐学习方法——费曼技巧,以教促学,教学相长
  19. Sentinel-1 SAR数据与精密轨道数据下载
  20. 用 texstudio, 外部 pdf 浏览器查看可以正常显示中文, 但是内置的 pdf 浏览器不能显示中文?

热门文章

  1. Java 解析URL
  2. 四川大学java语言程序设计_四川大学2014年计算机(软件)学院Java语言设计期末考试B卷程序.doc...
  3. 【课题总结】OpenCV 抠图项目实战(12)源程序代码
  4. mysql如何查看表拥有的键_如何查看表或列的所有外键?
  5. python读取两个csv文件后比较_python – 读取两个csv文件并比较每一行.如果行匹配打印两行,如果不相似则打印无效...
  6. php issign为false,支付宝接口集成及错误排除
  7. 数据结构-栈1-顺序存储
  8. 【文章】鱼那么信任水, 水却煮了鱼!
  9. PHP 常用设计模式 (转载)
  10. NFS服务端安装与配置