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’]);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/573586.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

docker ps3netsrv_QNAP 威联通 NAS TS-212P应用系列 篇一:实践基于QNAP平台搭建PS3NETSRV服务...

QNAP 威联通 NAS TS-212P应用系列 篇一:实践基于QNAP平台搭建PS3NETSRV服务2015-01-01 13:44:0047点赞307收藏70评论小编注:此篇文章来自即可瓜分10万金币,周边好礼达标就有,邀新任务奖励无上限,点击查看活动详情追加修…

一周内自动登录php,利用php实现一周之内自动登录存储机制(cookie、session、localStorage)...

cookie、session、localStorage这三个应该是最让程序员头疼的了,我利用简单的登录界面的username和password来说明一下吧.1.cookie用来存储用户相关数据,存储的位置在用户本地:首先是登录界面定义:Sign me in上面的代码大家都懂吧,就是一个表单.然后就是…

HTTP知识普及系列:HTTP返回状态码

状态码1XX 信息性状态码 接受的请求正在处理  2XX 成功状态码 请求正常处理完毕  3XX 重定向状态码 需要进行附加操作以完成请求  4XX 客户端错误状态码 服务器无法处理请求  5XX 服务器端错误状态码 服务器处理请求出错2XX 相应结果表明请求被正常处理了200 OK 表示从…

来电语音播报软件下载apk_消息语音播报app下载-消息语音播报安卓版 v1.0.1 - 安下载...

消息语音播报app是一款语音播报工具,它可以将微信、QQ、短信等消息进行语音播报,让你能够第一时间知晓消息内容,无需进入界面也能知晓发来的消息;它支持多个场就下使用,开启语音播报后无需你手动打开手机查看消息&…

linux创建特殊文件rules,RHEL5 Oracle Linux 5上生成正确的udev rule 规则文件

RHEL5 Oracle Linux 5上生成正确的udev rule 规则文件1.确认在所有RAC节点上已经安装了必要的UDEV包[rootrh2 ~]# rpm -qa|grep udevudev-095-14.21.el52.通过scsi_id获取设备的块设备的唯一标识名,假设系统上已有LUN sdc-sdifor i in c d e f g h i;doecho "s…

HTTP知识普及系列:HTTP首部

HTTP协议的请求和响应报文中必定包含HTTP首部。首部内容为客户端和服务器分别处理请求和响应提供所需要的信息。在请求中,HTTP报文由方法、URI、HTTP版本、HTTP首部字段等部分构成。在响应中,HTTP报文由HTTP版本、状态码(数字和原因短语&…

maya材质sheen_maya怎样做耐磨金属质感?

maya做出金属质感的方法:基本属里就调颜色跟漫反,colour任意Diffuse调低,滑杆三分之一到四分之一左右Specular Shading高光属Ecceicity、Specular Roll Off以及Specular Color控制高光点强度。面积颜色属一般金属的话第一个打到左边四分之一到…

swift 2.2 语法 (上)

前言&#xff1a; 1.此文中的语法会根据Swift的升级变动而更新。 2.如果需要请移步 -> swift2.2 语法&#xff08;中&#xff09;、swift 2.2语法&#xff08;下&#xff09; Swift与OC中常见的区别 导入框架 OC: #import <UIKit>#import "AFNetWorking.h"…

linux系统创建操作系统用户,linux系统中用户组创建管理linux操作系统 -电脑资料...

用户组管理包括对用户组创建&#xff0c;删除&#xff0c;修改及查看组操作命令&#xff0c;下面我们一起来看看希望本文章对各位同学会有所帮助哦&#xff0c;1&#xff0c;创建组groupadd test增加一个test组2&#xff0c;修改组groupmod -n test2 test将test组的名子改成tes…

android 半透明色值_Android 色值转换成透明度色值

在日常的android开发过程中&#xff0c;UI设计师一般都会或多或少的做一些不同透明度的背景&#xff0c;从而提高交互效果。 一般这个时候设计师们都会丢给我们一个色值&#xff0c;然后告诉我们&#xff0c;透明度30%&#xff0c;40% ......。 如果我们这个时候是给一个view添…

HTML中id、name、class 区别

HTML 中 id与name 区别 一个name可以同时对应多个控件&#xff0c;比如checkbox和radio 而id必须是全文档中唯一的 id的用途 1&#xff09; id是HTML元素的Identity&#xff0c;主要是在客户端脚本里用。 2&#xff09; label与form控件的关联&#xff0c;如 <label for&quo…

Linux系统查看系统硬件,linux怎么查看系统硬件信息

有时候想查看电脑中的系统硬件信息不知道怎么办下面是学习啦小编带来的关于linux怎么查看系统硬件信息的内容&#xff0c;欢迎阅读!linux怎么查看系统硬件信息?查看cpu&#xff1a;lscpu命令&#xff0c;查看的是cpu的统计信息.blueblue-pc:~$ lscpuArchitecture: i686 #cpu架…

manchi翻译中文 mi_求这一段意大利文歌词中文翻译(Mi Manchi)

机器翻译的实在太强大了^_^&#xff01;?你给的歌词不太准确啊&#xff0c;我帮你简单的翻译了一下。由于我是意语水平有限&#xff0c;可能会有小错误&#xff0c;还请高手多指教啊。你要的歌是Fausto Leali在1988年的流行曲&#xff0c;我是在找anna oxa的1988年Quando nasc…

图片的部分拉伸

- (UIImage *)stretchableImageWithLeftCapWidth:(NSInteger)leftCapWidth topCapHeight: (NSInteger)topCapHeight 这个函数是UIImage的一个实例函数&#xff0c;它的功能是创建一个内容可拉伸&#xff0c;而边角不拉伸的图片&#xff0c;需要两个参数&#xff0c;第一个是左边…

linux写一个ls命令,linux 下 如何自己写 ls 命令

有过linux 基础 都知道 ls 命令的作用下面给出实现代码#include #include #include #include #include #include #include #include #include #include int fun1(char *dir,char *filename){struct stat buf;char out[100];if(stat(dir,&buf)<0){perror("stat"…

java开发 时间类型的转换

1.String转date SimpleDateFormat format new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String time"2016-05-16 12:45:55"; Date date; try {   date format.parse(time);   System.out.print("Format To times:"date); } catch (Parse…

designer pyqt5 界面切换_PyQt5快速上手基础篇3-设置窗口标题和图标

前言本节我们为QT Designer生成的UI界面添加图标和窗口标题。一、实例运行1. QT Designer设计UI打开designer.exe,使用默认的Main Window创建&#xff0c;直接点击Create按钮即可设计UI图如下&#xff0c;并保存为test.ui2 将test.ui转换为ui_test.py进入ui_test.py目录&#x…

linux系统gpu test,轻量级显卡测试软件GpuTest 0.4.0版下载,支持windows Linux MAC-站长资讯中心...

说到显卡测试&#xff0c;我们一定会想到3D Mark&#xff0c;可是看着3D Mark那几百兆的大小和小水管的网速&#xff0c;有没有轻量级的测试软件呢&#xff1f;GpuTest就是一款十分小巧的软件&#xff0c;这是一款基于OpenGL的显卡压力测试软件&#xff0c;GpuTest还是一款跨平…

celery 可视化_Django中Celery的实现介绍(一)

Django中Celery的实现Celery介绍Celery是基于Python开发的一个分布式任务队列框架&#xff0c;支持使用任务队列的方式在分布的机器/进程/线程上执行任务调度。上图展示的是Celery的架构&#xff0c;它采用典型的生产者-消费者模式&#xff0c;主要由三部分组成&#xff1a;bro…

MySQL Router 测试使用 转

MySQL Router 测试使用1. 特性 MySQL Router 并没有包括一些特别新的特性, 总体上看中规中矩, 不过 first-available 和插件两个特性挺有意思, 后续会进行讲解, 特性包括: 对连接请求进行路由;和 Fabric 配套使用, 方便管理; 插件特性, 需要的功能以插件形式提供;2. 配置 MySQL…