PHP WebSocket Chat Application 2.0 实现聊天功能

Even though it hasn’t worked for quite some time now, my previous PHP WebSocket chat application has garnered quite a bit of attention and is still one of my most heavily trafficked posts. As a result I thought I’d provide you all with a working script as of Feb 15, 2012. Because I’m your typical lazy developer, I’ll […]

几点建议,让Redis在你的系统中发挥更大作用

Redis在很多方面与其他数据库解决方案不同:它使用内存提供主存储支持,而仅使用硬盘做持久性的存储;它的数据模型非常独特,用的是单线程。另一个大区别在于,你可以在开发环境中使用Redis的功能,但却不需要转到Redis。 转向Redis当然也是可取的,许多开发者从一开始就把Redis作为首选数据库;但设想如果你的开发环境已经搭建好,应用已经在上面运行了,那么 更换数据库框架显然不那么容易。另外在一些需要大容量数据集的应用,Redis也并不适合,因为它的数据集不会超过系统可用的内存。所以如果你有大数据应 用,而且主要是读取访问模式,那么Redis并不是正确的选择。 然而我喜欢Redis的一点就是你可以把它融入到你的系统中来,这就能够解决很多问题,比如那些你现有的数据库处理起来感到缓慢的任务。这些你就可 以通过Redis来进行优化,或者为应用创建些新的功能。在本文中,我就想探讨一些怎样将Redis加入到现有的环境中,并利用它的原语命令等功能来解决 传统环境中碰到的一些常见问题。在这些例子中,Redis都不是作为首选数据库。 显示最新的项目列表 下面这个语句常用来显示最新项目,随着数据多了,查询毫无疑问会越来越慢。 SELECT * FROM foo WHERE … ORDER BY time DESC LIMIT 10 在Web应用中,“列出最新的回复”之类的查询非常普遍,这通常会带来可扩展性问题。这令人沮丧,因为项目本来就是按这个顺序被创建的,但要输出这个顺序却不得不进行排序操作。 类似的问题就可以用Redis来解决。比如说,我们的一个Web应用想要列出用户贴出的最新20条评论。在最新的评论边上我们有一个“显示全部”的链接,点击后就可以获得更多的评论。 我们假设数据库中的每条评论都有一个唯一的递增的ID字段。 我们可以使用分页来制作主页和评论页,使用Redis的模板: -每次新评论发表时,我们会将它的ID添加到一个Redis列表:

连载之四:深度揭秘微信的敏捷开发与流程管理

IT海盗:这是微信的解构与建构连载的第四篇,依然干货连连,读起来激情澎湃。微信敏捷开发中的“微循环”是什么?张小龙怎样在看似“混乱”的流程管理中无招胜有招?让我们一起来享受微信连载第四篇! 点击这里查看前三篇并注意首篇开头的声明:(一)微信的诞生(二)微信的开发历程; (三)微信团队:这里像艺术中心、研究院、学校 敏捷是一种态度,试错是一种信仰。——微信团队Harvey 敏捷开发 敏捷开发是一种常用的软件开发模式,与传统的“瀑布式开发”相比,敏捷开发能够持续满足不断变化的需求变动。微信团队的情况正是这样,“整个开发过程中产品会不断修改,这是我们的特色。”Harvey说,“哪怕在发布前的十分钟,我们也要允许产品决策者提出变更。”“为了给产品决策者提供最大的自由度,敏捷原则成为整个开发流程的指导原则,”“极度敏捷”也成为技术团队乃至整个微信团队的追求。

php在linux系统下mkdir()函数的权限问题

php在linux系统下mkdir()函数的权限问题 php代码创建一个目录,期望的目录权限是0777,但结果权限却是0755。 mkdir(“file”,0777); 结论: 1、php中的mkdir()函数创建的指定目录权限只能小于等于系统umask设定的默认权限。 2、php中的chmod()函数不受系统umask设定的权限影响,可以设置比系统默认权限大的权限。 3、linux系统中的mkdir命令可以设置大于默认值的权限。 总结: 从上述结论中可以得出如下结果。在用php中的mkdir()函数创建读写权限目录的时候,不要直接使用mkdir函数指定权限,以避免系统umask的影响。可以用如下代码: mkdir(“file); chmod(“file”,0777);

nginx url重写问题

发现一个问题,如果这样设置, if (!-e $request_filename) { #地址作为将参数rewrite到index.php上。 rewrite ^/(.*)$ /index.php/$1; #若是子目录则使用下面这句,将subdir改成目录名称即可。 #rewrite ^/subdir/(.*)$ /subdir/index.php/$1; } 地址可以重定向 比如: 重启Nginx以后,http://localhost/project/Index/insert, http://localhost/project/index.php/Index/delete 这样的URL 但问题是index.php后面加一个/就会502 Bad Gateway报错,好像与隐藏index.php没有什么关系,框架是thinkphp,这是什么问题 nginx/1.5.2 php 5.5.1 后来将nginx版本降至1.0.15后,添加一段location就可以了? 虽然两个版本的配置文件有不一样,分析后得出还是location中的问题   location / { #ThinkPHP Rewrite if ( !-e $request_filename ){ rewrite ^/(.*)$ /index.php/$1; } }   location ~ .php($|/){ #配置PHP支持PATH_INFO进行URL重写 set $script     $uri; set $path_info […]

javascript 随机数生成方法

1.使用内置的随机数发生方法: Math.random(); //该方法产生一个0到1之间的浮点数。 Math.floor(Math.random()*10+1); //1-10 Math.floor(Math.random()*24);//0-23 2.基于时间,亦可以产生随机数: var now=new Date(); var number = now.getSeconds(); //这将产生一个基于目前时间的0到59的整数。 var now=new Date(); var number = now.getSeconds()%43; //这将产生一个基于目前时间的0到42的整数。 3. 一个相当优秀的的随机数发生器程序,能应用于许多领域。 <script language=”JavaScript”><!– // The Central Randomizer 1.3 (C) 1997 by Paul Houle (houle@msc.cornell.edu) // See: http://www.msc.cornell.edu/~houle/javascript/randomizer.html rnd.today=new Date(); rnd.seed=rnd.today.getTime(); function rnd() { rnd.seed = (rnd.seed*9301+49297) % 233280; return rnd.seed/(233280.0); }; function […]

基于一致性hash算法 C++实现详解

在《基于一致性hash算法(consistent hashing)的使用详解》一文中已经介绍了一致性hash的基本原理,本文将会对其具体实现细节进行描述,并用c++语言对一致性hash进行了简单的实现   一致性hash算法实现有两个关键问题需要解决,一个是用于结点存储和查找的数据结构的选择,另一个是结点hash算法的选择。 首先来谈一下一致性hash算法中用于存储结点的数据结构。通过了解一致性hash的原理,我们知道结点可以想象为是存储在一个环形的数据结构上(如下图),结点A、B、C、D按hash值在环形分布上是有序的,也就是说结点可以按hash值存储在一个有序的队列里。如下图所示,当一个hash值为-2^20的请求点P查找路由结点时,一致性hash算法会按hash值的顺时针方向路由到第一个结点上(B),也就是相当于要在存储结点的有序结构中,按查询的key值找到大于key值中的最小的那个结点。因此,我们应该选择一种数据结构,它应该高效地支持结点频繁地增删,也必须具有理想的查询效率。那么,红黑树可以满足这些要求。红黑树是一颗近似平衡的一颗二叉查找树,因为操作比如插入、删除和查找某个值的最坏情况时间都要求与树的高度成比例,这个在高度上的理论上限允许红黑树在最坏情况下都是高效的,而不同于普通的二叉查找树。 因此,我们选择使用红黑树作为结点的存储结构,除了需要实现红黑树基本的插入、删除、查找的基本功能,我们还应该增加另一个查询lookup函数,用于查找大于key中最小的结点。

memcached的分布式

第1次:http://tech.idv2.com/2008/07/10/memcached-001/ 第2次:http://tech.idv2.com/2008/07/11/memcached-002/ 第3次:http://tech.idv2.com/2008/07/16/memcached-003/ memcached的分布式 正如第1次中介绍的那样, memcached虽然称为“分布式”缓存服务器,但服务器端并没有“分布式”功能。 服务器端仅包括 第2次、 第3次 前坂介绍的内存存储功能,其实现非常简单。 至于memcached的分布式,则是完全由客户端程序库实现的。 这种分布式是memcached的最大特点。 memcached的分布式是什么意思? 这里多次使用了“分布式”这个词,但并未做详细解释。 现在开始简单地介绍一下其原理,各个客户端的实现基本相同。 下面假设memcached服务器有node1~node3三台, 应用程序要保存键名为“tokyo”“kanagawa”“chiba”“saitama”“gunma” 的数据。

CRC32算法详细推导

CRC 算法的数学基础 CRC 算法的数学基础就不再多啰嗦了,到处都是,简单提一下。它是以 GF(2) 多项式算术为数学基础的,GF(2) 多项式中只有一个变量 x ,其系数也只有 0 和 1 ,比如: 1 *x^6 + 0*x^5 + 1*x^4 + 0*x^3 + 0*x^2 +1*x^1 + 1*x^0 = x^6 + x^4 + x + 1 加减运算不考虑进位和退位。说白了就是下面的运算规则: 0 + 0 = 0    0 – 0 = 0 0 + 1 = 1    0 – 1 = 1 1 + 0 = 1    1 – 0 = 1 1 + 1 = […]

oracle与db2的区别比较(转)

系统结构概述 首先,我们需要理解 Oracle 使用的架构,并理解它与 DB2 的不同之处。图 1 展示了 Oracle 的系统结构。将该图与 图 2 进行比较,后者显示了 DB2 的系统结构。在阅读本文的时候,为便于理解,可以参照这两个图。 图 1. Oracle on Linux, UNIX, and Windows Version 10.2 的系统结构 图 2. DB2 on Linux, UNIX, and Windows 系统结构