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 1;
        }

        if (mmc->tcp.status == MMC_STATUS_FAILED &&
            mmc->tcp.retry_interval >= 0 && (long)time(NULL) >= mmc->tcp.failed + mmc->tcp.retry_interval) {          //这里用当前时间和故障发生时间+隔离时间作对比
            return 1;
        }
    }

    return 0;
}

二.重试策略

请求某个节点超时或者失败会有一次重试的机会,但是当服务器重启以后,貌似没有做重试,只是标记了连接状态为不可用。当第二次用到这个连接的时候才会重建连接,这样重启前有多少连接,就会有多少请求不可用。

/* 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)", 0 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客户端需要注意的地方

时间: 2024-10-09 09:30:18

PHP使用memcache长连接作为RPC客户端需要注意的地方的相关文章

使用DWR长连接技术实现客户端一对一发送消息

关于DWR怎么使用我的上一篇博文里面记录了,这里写一个DWR一对一消息推送的WEB程序,也就是WEB一对一聊天.我的思路是这样的:首先每个用户在登陆后在各自的页面放置一个唯一标记(如用户的ID,也可以放在session里面),用户A向用户B发送的消息 -->服务器 -->JAVA方法-->JAVA方法调用前端所有正在访问聊天页面的JS函数-->JS判断消息发送至的客户端是否是用户B -->是则显示,否则不显示:用户B向A同样过程 首先是该项目的web.xml文件: <?

java Socket 长连接 心跳包 客户端 信息收发 demo

今天写了个socket的测试小程序,代码如下 import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.Socket; import java.net.UnknownHostException; /** * @author 某家: * @version 创建时间:2015年8月17日 下午3:04:14 * 类说明 */ public class Con

nginx之旅(第六篇):nginx优化--nginx优化目的、工作进程优化、长连接设置、数据压缩、客户端缓存

一.Nginx优化目的 标准情况下,软件默认的参数都是对安装软件的硬件标准来设置的,目前我们服务?的硬件资源远远大于要求的标准,所以为了让服务?性能更加出众,充分利用服务?的硬件资源,我们一般需要优化APP的并发数来提升服务器?的性能. 二.工作进程优化 1) worker_processes worker_processes指Nginx的工作进程,这个值是直接受到服务器CPU核数量影响的(当然也有其他影响),Nginx默认配置为auto,意思是会自动检测CPU核做修改,建议worker_pro

Web 通信 之 长连接、长轮询(long polling)(转载)

基于HTTP的长连接,是一种通过长轮询方式实现"服务器推"的技术,它弥补了HTTP简单的请求应答模式的不足,极大地增强了程序的实时性和交互性. 一.什么是长连接.长轮询? 用通俗易懂的话来说,就是客户端不停的向服务器发送请求以获取最新的数据信息.这里的“不停”其实是有停止的,只是我们人眼无法分辨是否停止,它只是一种快速的停下然后又立即开始连接而已. 二.长连接.长轮询的应用场景 长连接.长轮询一般应用与WebIM.ChatRoom和一些需要及时交互的网站应用中.其真实案例有:WebQQ

[转]HTTP的长连接和短连接

本文原链接:http://www.cnblogs.com/cswuyg/p/3653263.html   本文总结&分享网络编程中涉及的长连接.短连接概念.     关键字:Keep-Alive,并发连接数限制,TCP,HTTP 一.什么是长连接 HTTP1.1规定了默认保持长连接(HTTP persistent connection ,也有翻译为持久连接),数据传输完成了保持TCP连接不断开(不发RST包.不四次握手),等待在同域名下继续用这个通道传输数据:相反的就是短连接. HTTP首部的C

Web 通信 之 长连接、长轮询(long polling)

基于HTTP的长连接,是一种通过长轮询方式实现"服务器推"的技术,它弥补了HTTP简单的请求应答模式的不足,极大地增强了程序的实时性和交互性. 一.什么是长连接.长轮询? 用通俗易懂的话来说,就是客户端不停的向服务器发送请求以获取最新的数据信息.这里的“不停”其实是有停止的,只是我们人眼无法分辨是否停止,它只是一种快速的停下然后又立即开始连接而已. 二.长连接.长轮询的应用场景 长连接.长轮询一般应用与WebIM.ChatRoom和一些需要及时交互的网站应用中.其真实案例有:WebQQ

Loadrunner_http长连接设置

最近协助同事解决了几个问题,也对loadrunner的一些设置加深了理解,关键是更加知其所以然. ljonathan http://www.51testing.com/html/48/202848-241574.html 1. loadrunner_internet运行时设置 总览: 2. 中文乱码_设置自动字符集转换 3.loadrunner_连接下载超时_tcp是否使用长连接设置 帮助文档中的说明: 随后在脚本中进行了不同的设置,进行了结果验证: 3.1 默认值:设置 Keep-Alive

HTTP的长连接和短连接

 http://www.cnblogs.com/cswuyg/p/3653263.html 本文总结&分享网络编程中涉及的长连接.短连接概念.     关键字:Keep-Alive,并发连接数限制,TCP,HTTP 一.什么是长连接 HTTP1.1规定了默认保持长连接(HTTP persistent connection ,也有翻译为持久连接),数据传输完成了保持TCP连接不断开(不发RST包.不四次握手),等待在同域名下继续用这个通道传输数据:相反的就是短连接. HTTP首部的Connecti

Web 通信 之 长连接、长轮询(转)

Web 通信 之 长连接.长轮询(long polling) 基于HTTP的长连接,是一种通过长轮询方式实现"服务器推"的技术,它弥补了HTTP简单的请求应答模式的不足,极大地增强了程序的实时性和交互性. 一.什么是长连接.长轮询? 用通俗易懂的话来说,就是客户端不停的向服务器发送请求以获取最新的数据信息.这里的"不停"其实是有停止的,只是我们人眼无法分辨是否停止,它只是一种快速的停下然后又立即开始连接而已. 二.长连接.长轮询的应用场景 长连接.长轮询一般应用与W