网络及后台开发
oldworm
这个作者很懒,什么都没留下…
展开
-
IOCP 生存期管理
从2004年使用iocp开始,尝试过很多种client生存期管理,最初使用一个锁userlock,在sendcomp和recvcomp以及senddata等都用一个锁,而且是进去的地方就开始锁,这种方式最简单,也产生了最初的版本,之后为追求更高效率,慢慢演变为使用两个锁,readlock和writelock,再之后演变为send使用一个锁,recv使用interlockedxxx,再之后演变为se原创 2010-02-23 10:44:00 · 1450 阅读 · 0 评论 -
我的网络模块设计第一版
<br />我的IOCP网络模块设计<br /> <br />为了设计一个稳定易用高效的iocp网络模块,我前前后后花了好几个月的时间,也曾阅读过网上很多资料和代码,但是非常遗憾,能找到的资料一般都说得很含糊,很少有具体的,能找到的代码离真正能商用的网络模块差得太远,大多只是演示一下最基本的功能,而且大多是有很多问题的,主要问题如下:<br />1、 很多代码没有处理一次仅发送成功部分数据的情况。<br />2、 几乎没有找到能正确管理所有资源的代码。<br />3、 大多没有采用用pool,有的甚至原创 2010-10-03 00:25:00 · 2013 阅读 · 1 评论 -
我的网络模块设计第二版
07年我写了一篇文章叫《我的iocp模块》,姑且叫那个为第一版吧,由于持续对网络模块进行改进,所以现在的实现和当时有很大改变,加上上层应用越来越多,又经过了几年时间考验,现在的实现方式比之前的更灵活更有效率,也因为最近看了一些人做网络程序多年竟毫无建树,一直要用别人写的网络模块,所以有感而写此文,为了使得此文不受上一篇《我的iocp模块》的影响,我决定写之前不看原来的文章,所以此文跟原文那篇文章可能没有太多相似性。一个基本的网络模块,无非就是管理N个连接,快速处理每个连接的收发数据、消息等,所谓好的网路模块原创 2010-10-03 00:27:00 · 2919 阅读 · 13 评论 -
一套网络框架的杯具
<br /><br />一套网络框架的杯具<br /> <br /> <br />之前设计了一套网络框架,持续改进了很多年,使用在很多项目上,综合效率还行,也很稳定,一直以来对这套东西信心满满,总以为啥问题都好解决,但最近就有个需求让我选择还是改了下这个框架。<br />之前的框架是这样的,可以开一组N个io线程,可以开一组N个同步线程(默认1个),可以开一组N个异步线程(默认1个),可以开一组N个timer线程(默认1个),可以开一组N个异步线程(默认cpu个),每组可独立受控,每组可支持自定义消息,可支原创 2011-01-26 16:13:00 · 1342 阅读 · 0 评论 -
Windows下两种iocp实现的差距
<br /><br />Windows下两种iocp实现的差距<br /> <br /> <br />之前几天说过,因为经典iocp实现(以下简称经典实现)多个io线程绑定在一个iocp上,这样内部管理了iocp队列的处理,内部决定是不是需要线程切换,我上次修改的一个版本(以下简称实现2),用了多个io线程,每个iocp队列仅绑定一个io线程,一组用户共享一个io线程,这和经典的多线程epoll模型的做法是很相似的,这样每个io线程是可以独立控制了,但理论上这种做法没有发挥iocp自动管理线程切换的优势,昨原创 2011-02-01 10:49:00 · 5060 阅读 · 3 评论 -
关于下载工具的多线程问题
关于下载工具的多线程问题 差不多是从蚂蚁开始吧,开创了多线程下载同一个资源的方式,当时觉得真神奇,让多个线程同时下一个文件,速度真快,想法真好。随着对编程的认识加深,特别是做server端编程之后,逐渐认识到,多线程下载同一个资源,无非就是建立多个连接,分别从原创 2011-07-05 10:24:46 · 1698 阅读 · 1 评论 -
关于app和web的混合服务器
关于app和web的混合服务器 等下载机器实在有些慢,无聊之下继续写篇短文发点感慨。前段时间,为让客户端界面更容易表达一点,将客户端需要展现数据的地方全用html实现了,后端自然要用html格式化信息,通用匹配模式自然是要安排一个web服务器,非http信息走原创 2011-07-05 11:01:18 · 3495 阅读 · 0 评论 -
一次全文索引编码实践
前端时间要处理一个即时输入提示和查询功能,一开始由于考虑到一个很特殊的需求,做相似度匹配(就是类似abc能匹配acb),所以用数据库的现成办法都不行,用全文索引也不行,因此第一个版本是前同事java版本,计算最深的一个查询一次执行5分钟,赶进度之下弄了第一个c++版本,直接内存缓原创 2011-07-28 11:03:50 · 1189 阅读 · 0 评论 -
经纬度距离查询优化实例
最近参与开发一个SNS类型的社交程序,里面要记录用户的经纬度,还要按照某个已知位置查询附近的用户,这类应用在社交类产品里面算最常见的了,起初在网上搜索了一下,没找到同类文章,为了实现根据一个已知位置(double lon_me, double lat_me)查询double distance范围内的用户的功能,做了一个最简单的实现,那就是遍历所有lon,lat数据,在客户端计算距离,然后比较距离,原创 2012-02-21 00:24:09 · 4840 阅读 · 2 评论 -
mysql在nosql下的缓存变革
mysql在nosql下的缓存变革 mysql这个互联网生出来的数据库被无数个网站、游戏等使用,据说google、tencent、taobao都在使用它,在互联网高速发展的过程中,由于高速缓存的需要以及传统数据库难于应付巨量写,于是各种nosql方案都出来了,最经典就是memcached,以及后来出现的redis,由于memcached本身是不支持持久化的,但实际需求却可原创 2012-04-27 11:06:41 · 2277 阅读 · 0 评论 -
G530 CPU虚拟化试验
G530 CPU虚拟化试验 前些天想玩玩虚拟化,手里机器不够用了,将家里的老pc拆了,买了主板(约400元),cpu g530的(+风扇约280),内存8g(约270),硬盘用了旧的sata(300g),电源换了个新的(航嘉冷静王xp版,准80plus,易讯上用了张优惠券,到手200元),机箱用了旧的,加一起大概1150左右吧,最初是打算装xenserver的,但试了几次原创 2012-04-27 10:19:15 · 3339 阅读 · 0 评论 -
虚拟化的那点事
虚拟化的那点事 虚拟化现在被鼓吹得神乎其神,似乎不虚拟化就是落伍,似乎不虚拟化就无法实现各种先进功能,到底虚拟化是怎么产生的,它真的有这么牛逼吗。 其实从os的发展来看,虚拟化不是今天诞生的,虚拟化思想无处不在,最早的地址虚拟化开始,32位下每个进程独享4g空间,那个时候觉得4g已经很多了,现在的主流cpu都超32位地址线,连入门级赛扬g530也原创 2012-04-18 10:59:07 · 1554 阅读 · 0 评论 -
对protobuf的深入解释
对protobuf的深入解释 对protobuf俺的认识,总结为以下几点:1. pb是一种编码方式。之所以这么说是因为有的人认为它是协议,那就侠义化了,pb本质上就和json、xml类似,是一种编码方式,用pb编码出来的流可以套在任何现有协议里面,作为内容部分,如可以放在http的content区域,或者私有协议的content区域,外面套上(length, type, flag原创 2012-07-06 14:38:43 · 13133 阅读 · 2 评论 -
time_t的局限性及时间函数设计
time_t的局限性及时间函数设计 time_t早期是32位的,用来表示从1970.1.1开始的秒数,当初设计的时候受制于32位的容量,time_t只能表示136年的时间,而且精度只能到秒,后来time_t修改为64位,但仍然兼容了原来的设计,time_t虽然现在默认64位了但依然精度为秒,这是极大浪费的。系统还有很多time相关的函数,如win下mktime、gmtime、GetSy原创 2012-06-27 11:45:01 · 10359 阅读 · 1 评论 -
吹牛太少,以后要多吹
<br />昨天去见两个老乡,多年的朋友同学,也是搞技术的,大家都在上海,只是交流不是太多,聊起我做过的一些东西,他觉得不大相信,我说我写的远程控制程序全dll组成,所有模块可热升级,包括主模块,主模块小于20k,他似乎难于相信,我跟他说这个程序还是2001年做的,他就更难相信了。后来又说起我最近做的那个云计算的价格查询,他也很难相信底下是云计算,由于没带机器也没法给他看后台服务器,所以我估计他最后还是半信半疑吧。上周另一个朋友说他们老板有个项目十来个人做了3年,一直做不稳定,我说给我一段时间我肯定能把他整原创 2010-10-03 01:13:00 · 1914 阅读 · 7 评论 -
云计算实践2
云计算实践2上一篇《基于云计算的价格查询实现》就算是云计算实践1吧,所以这篇就叫《云计算实践2》。其实今年开始研究云计算有一段时间了,约3个月前研究md5破解(http://www.shprog.com/HashCrack.aspx),那个项目就是选来玩云计算的,当时觉得md5破解这个小项目好玩,逻辑很简单,密码字母组合可长可短,规模可大可小,1台机器不嫌少,1万台不嫌多,所以就选中了它,没想到第一个md5破解版本后来演变成了主要是密码数据库的制造,虽然第一版没有做成标准云计算,但也算有个结果,而且存储效率原创 2010-08-31 23:57:00 · 886 阅读 · 0 评论 -
服务器程序脚本选择
服务器程序可以使用以下脚本1、 wow大规模的使用lua,已经导致lua成为网络游戏领域第一大脚本语言,速度和简洁性是它的突出特点,丰富的包装库也使得它的使用很简单,但库偏少和没有完整的面向对象特性也导致它不优雅,有的时候需要自己包装太多东西,总之还不是一个完美的东西。Tcc, python等也是服务器脚本的可选语言,tcc速度更快,python库丰富。2、 我一直说server程序原创 2010-03-24 10:42:00 · 1691 阅读 · 1 评论 -
常见cs程序自定义数据包描述
常见cs程序自定义数据包描述 常见cs程序自定义包可分为块型包、非块型包,非块型包如http协议的,用/r/n/r/n结束,我们这里重点讨论块型包,块型包常见头部如下:Struct PKHEAD{ Union{ DWORD type; Struct{ WORD mtype原创 2010-03-24 17:52:00 · 2978 阅读 · 2 评论 -
server模块如何包装
Server模块如果仅仅作为一个lib包装出来自然不是最好,虽然可在c++工程很容易使用,效率也比较高,但要使用到其他语言上去就没有办法,如果包装一下自然是最好的,但如何包装呢,包装成一个什么样子也是很重要的,最常见的包装自然是包装成一个dll,输出一些接口,其他上层模块在该接口的基础上使用。最简单的包装一般可输出如下一些接口, Public IServer:{Virt原创 2010-03-24 10:43:00 · 991 阅读 · 1 评论 -
从web体系学习服务器端程序设计
我一直坚持一个观点,从web体系学习服务器端程序设计,web作为发展最早也是前景最广阔的internet模型,几乎支撑了网络世界一半以上的应用,其他email ftp等传统应用虽然产生时间也很早但几乎都很没落,只有web风采依旧,蓬勃发展,从apache到lighttp到nginx等,一个接一个高性能的web服务器程序分别被开发出来,上层应用cgi, isapi(nsapi), fastcgi助力原创 2010-03-30 12:33:00 · 1589 阅读 · 1 评论 -
俺钟情的Json类
Json在ajax领域很流行,记得当时看过它的介绍后很兴奋,网上找了一些解析json的c和c++代码,不过没有找到特别好的,有的写得不错不过要依赖于boost,有的用c写的不大好用,好在json语法简单,参考了一些c/c++的json解析代码做了一个json类,最近又把去年写的json类修改为unicode下使用,增了一些功能,现在CJsonw可以解析const char *型输原创 2010-04-13 18:51:00 · 1821 阅读 · 1 评论 -
HashCrack程序规划
HashCrack程序规划 最近几天在思考如何遍历md5找出原码字符串,但九十多个可见字符,96^6 782757789696,就算只遍历6位组合也是非常惊人的巨量数据,单机根本无法完成,根据常用密码合成规律,我们可以采用分而治之的方法解决,方法大致如下:1、 使用很多机器,机器越多覆盖的范围越大。2、 优先覆盖最常用的范围,如全数字组合,小写字母组合,小写数字混合组合,大写字原创 2010-05-24 11:20:00 · 955 阅读 · 0 评论 -
从需求角度看NOSQL发展
从需求角度看NOSQL发展早先当640kb就足够使用的观点流行的时候,数据处理规模很小,需求也不多,于是简单的文件存储即可满足需求,发展一段时间之后ISAM之类的简单存储就可满足需求,再之后sql流行,当sql为了适应各种需求变得越来越庞大的时候,效率也止步不前,在将缓存和多线程性能榨取完了之后,sql各项性能还只停留在满足常规应用的地步,难于处理1秒万次以上的读写操作,也难于解决万个以上的并发连接,一般的企业不可能动不动就上硬件,所以nosql发展是时代的需要是需求的推动。当然一般sql对传统企业还是足够原创 2010-06-01 13:46:00 · 986 阅读 · 0 评论 -
Json解析速度问题
<br />一直想测试一下json的解析速度,前些天终于花了一点时间测了一下,在我的破笔记本上,解析一个包含10个元素(各种类型都有)的object型json,1秒钟大概只能解析不到10w次,就算把内存池用到极致也只能解析12.5w次左右,换用自己定义的一种bjson格式,速度快了一些,但也不超过20w次,想想工作量也的确很大,生成一个包含10个子元素的object,需要动态分配最少10次,还要做最少10次hash的insert,还有各种格式的转换工作,里面有array和object还要额外分配容器并处理子原创 2010-08-11 22:04:00 · 9582 阅读 · 1 评论 -
价格查询网
<br />花了四天写了个价格查询的web体验版,大致结构是这样的,前端web界面:<br /><br /><br />该web通过tcp连接后台一个ppsserver,ppsserver调用一个ppsget.dll从一些配置好的网站现拉网页分析产品价格等信息,说起来是很简单的,要是画出结构图来也是很简单的,看看效果:<br /> <br /> <br /> <br /><br />为了写这个东西查了比价网等很多资料,看来看去觉得现在的一些比价网都把自己当购物门户了,上面什么信息都有,数据都是缓存的,有的还原创 2010-08-11 22:36:00 · 1273 阅读 · 0 评论 -
基于云计算的价格查询实现
基于云计算的价格查询实现上篇博客提到价格查询功能,当时正在考虑做成云计算模式,所以当时连多线程都没考虑,就是准备将功能都交给云计算系统的,由云计算内部管理线程和调度问题,所以当时实现就根本不用考虑多线程,现在功能基本实现,下面大致讲讲我的做法。国内很多人谈到全文检索就必提lucene,提到云计算就必提google的map/reduce、amazon的ec2,似乎只有那些东西才叫云计算,咱是实战派,没兴趣口舌之争,在俺看来分布式存储+分布式计算就叫云计算,俺就看了看google的map/reduce论文,照其原创 2010-08-22 16:12:00 · 1083 阅读 · 0 评论 -
定时器模块改造
<br />之前的文章讲过,我设计的网络框架有几组线程,分别是io、异步、同步、定时器,各个不同应用server几组线程组合形式不尽相同,简单的可只有io线程,复杂一点的可io+同步,更复杂一点的也可io+同步+异步+定时器,总之我以几组线程的自由组合方式应付各种应用,在我负责的server全是这一套框架实现的,不管是支持几万人连接的服务器,还是只有几个用户连接的内部服务器,这套框架也算是久经考验,稳定运行多年,内部使用也非常简单,如给sync线程组发一个消息只要PostSyncEvent,如果要给异步线程原创 2010-09-11 12:52:00 · 2606 阅读 · 0 评论 -
IT行业能说的人太多能做的人太少
<br />It行业从业十几年,虽然接触的人并不多,但算上网络上有点交往的人,也不算太少,阅读过无数代码,很容易得出这样的感悟,国内it行业能说的人太多,能做的人太少,能说大意就是能说会道,说起来头头是道,从架构到体系到模块到接口都能说得很专业,但实施起来就不行,不但架构做不好,接口定义不清,就连小小模块也未见得可搞定,这样的人实在是太多,之前一直以为一个项目组多几个人总能加快点速度,现在终于明白,一个项目组加几个不合适的人不但不能加速反而要降速,甚至直接导致项目开发失控、失败。关键模块如果让一个不称职的人原创 2010-09-11 14:57:00 · 3954 阅读 · 6 评论 -
实用云计算环境简述
<br />实用云计算环境简述<br /> <br />如今it领域没听说过云计算的绝对是out了,虽然大家都知道云计算,虽然很多高校很多专业都开设了云计算专业,虽然很多人都在讨论云计算,虽然也有少数人走在了应用云计算的前列,然而,可悲的是,大多数人对云计算的认识仅限于amazon、google、microsoft、ibm有能力架设云计算环境,其他公司都靠边,甚至唯他们的云计算才叫云计算,别的企业根本不可能做云计算,各级政府部门最搞笑了,动不动花多少钱引进某某云计算环境,填补某某空白,多少cpu多少机器每秒原创 2010-09-11 14:09:00 · 1473 阅读 · 0 评论 -
关于网络编程中的序
关于网络编程中的序 有过网络编程的人一般都知道无状态有状态的区别,大多数人都知道web是无状态的,但很多人不知道有序和无序的区别,甚至有的从业很多年的同事也想当然的以为都是有序的。所谓序其实说起来很容易理解,就是abc三个包发到后端,依次返回ABC,说起来就这么简单,但是这个小小的序其实决定着后端如何实现的策略,我们常见的cs服务,如mysqlclient和my原创 2012-06-30 17:04:22 · 1381 阅读 · 2 评论