PHP使用memcache长连接作为RPC客户端需要注意的地方
memcache扩展版本 3.0.8
一. retry_interval
$retry_interval 某个rpc服务器端失败后故障转移的时间,retry_interval的时间内,该节点会被一直标记为不可用,隔离掉,为小于0的数一直隔离。
int mmc_server_valid(mmc_t *mmc TSRMLS_DC) /*
checks if a server should be considered valid to serve requests {{{ */
{
if (mmc != NULL) {
if (mmc->tcp.status >= MMC_STATUS_DISCONNECTED) {
return ;
} if (mmc->tcp.status == MMC_STATUS_FAILED &&
mmc->tcp.retry_interval >= && (long)time(NULL) >= mmc->tcp.failed + mmc->tcp.retry_interval) {
//这里用当前时间和故障发生时间+隔离时间作对比
return ;
}
} return ;
}
二.重试策略
请求某个节点超时或者失败会有一次重试的机会,但是当服务器重启以后,貌似没有做重试,只是标记了连接状态为不可用。当第二次用到这个连接的时候才会重建连接,这样重启前有多少连接,就会有多少请求不可用。
/* read more data from socket */
if (php_stream_eof(mmc->readreq->io->stream)) { //服务器端主动断开连接的情况,stream读到EOF
result = mmc_server_failure(mmc, mmc->readreq->io, "Read failed (socket was unexpectedly closed)", TSRMLS_CC);
if (result == MMC_REQUEST_FAILURE) {
/* take server offline and failover requests */
mmc_server_deactivate(pool, mmc TSRMLS_CC);
}
if (result == MMC_REQUEST_RETRY) {
mmc_select_retry(pool, mmc, mmc->readreq TSRMLS_CC);
}
}
break;
红字是我后加的,原来扩展虽然标记了result为MMC_REQUEST_RETRY,但是没做重试。简单的方法也可以在扩展中再new Memcache(),addServer一次。
PHP使用memcache长连接作为RPC客户端需要注意的地方的更多相关文章
- java  Socket 长连接 心跳包 客户端 信息收发 demo
		今天写了个socket的测试小程序,代码如下 import java.io.IOException; import java.io.InputStream; import java.io.Output ... 
- NIO单一长连接——dubbo通信模型实现
		转: NIO单一长连接——dubbo通信模型实现 峡客 1.2 2018.07.15 19:04* 字数 2552 阅读 6001评论 30喜欢 17 前言 前一段时间看了下dubbo,原想将dubb ... 
- TCP同步与异步,长连接与短连接【转载】
		原文地址:TCP同步与异步,长连接与短连接作者:1984346023 [转载说明:http://zjj1211.blog.51cto.com/1812544/373896 这是今天看到的一篇讲到T ... 
- HTTP的长连接和短连接
		本文总结&分享网络编程中涉及的长连接.短连接概念. 关键字:Keep-Alive,并发连接数限制,TCP,HTTP 一.什么是长连接 HTTP1.1规定了默认保持长连接(HTT ... 
- Web 通信 之 长连接、长轮询(转)
		Web 通信 之 长连接.长轮询(long polling) 基于HTTP的长连接,是一种通过长轮询方式实现"服务器推"的技术,它弥补了HTTP简单的请求应答模式的不足,极大地增强 ... 
- Web 通信 之 长连接、长轮询(long polling)
		基于HTTP的长连接,是一种通过长轮询方式实现"服务器推"的技术,它弥补了HTTP简单的请求应答模式的不足,极大地增强了程序的实时性和交互性. 一.什么是长连接.长轮询? 用通俗易 ... 
- HTTP长连接短连接
		一.什么是长连接 HTTP1.1规定了默认保持长连接(HTTP persistent connection ,也有翻译为持久连接),数据传输完成了保持TCP连接不断开(不发RST包.不四次握手),等待 ... 
- Web 通信 之 长连接、长轮询(long polling)(转)
		基于HTTP的长连接,是一种通过长轮询方式实现"服务器推"的技术,它弥补了HTTP简单的请求应答模式的不足,极大地增强了程序的实时性和交互性. 一.什么是长连接.长轮询? 用通俗易 ... 
- HTTP协议中的长连接和短连接(keep-alive状态)
		什么是长连接 HTTP1.1规定了默认保持长连接(HTTP persistent connection ,也有翻译为持久连接),数据传输完成了保持TCP连接不断开(不发RST包.不四次握手),等待在同 ... 
随机推荐
- Intellij IDEA 添加项目依赖
			https://blog.csdn.net/TaooLee/article/details/51305443 idea导入一个maven项目 https://blog.csdn.net/qq_3837 ... 
- vue dev 环境下的跨域访问
			概述:被dev环境下的跨域弄晕了好几天,build环境还在研究中 1.config--->index.js---->module.exports---->dev 2.在main.js ... 
- 利用httpClient发起https请求
			HttpClientBuilder b = HttpClientBuilder.create();// setup a Trust Strategy that allows all certifica ... 
- Android 中判断网络状态
			首先在AndroidManifest.xml添加权限 <uses-permission android:name="android.permission.ACCESS_NETWORK_ ... 
- (转)同步异步,阻塞非阻塞 和nginx的IO模型
			同步异步,阻塞非阻塞 和nginx的IO模型 原文:https://www.cnblogs.com/wxl-dede/p/5134636.html 同步与异步 同步和异步关注的是消息通信机制 (sy ... 
- (转)超全整理!Linux性能分析工具汇总合集
			超全整理!Linux性能分析工具汇总合集 原文:http://rdc.hundsun.com/portal/article/731.html 出于对Linux操作系统的兴趣,以及对底层知识的强烈欲望, ... 
- unity向量计算
			参考:https://www.cnblogs.com/wywnet/p/4790665.html 上面的文章讲的很重要 下面是我自己实现的一个例子 一直一个向量,一个夹角,求另一个向量 按P键改变夹角 ... 
- Python 递归返回树形菜单JSON串 <flask>
			需求:菜单管理功能(增.删.改),多级树形菜单展示 数据库表设计 create table if not exists Menu( id serial primary key , title ) no ... 
- uwsgi服务启动、关闭、重启操作
			1. 添加uwsgi相关文件 在之前的文章跟讲到过centos中搭建nginx+uwsgi+flask运行环境,本节就基于那一次的配置进行说明. 在www中创建uwsgi文件夹,用来存放uw ... 
- ASP.NET内置对象-网页转向的4中方法
			ASP.NET页面跳转的方法 1.超链接 2.Response.Redirect(“Urlstring”) 3.Server.Transfer(“UrlString”) 4.PostBackUrl 1 ... 
