- 博客(16)
- 收藏
- 关注
原创 .SVN清理脚本
<br /> 前几天移动项目想要放到另外一个版本控制平台, 结果发现大量的.svn污染整个目录... 之前公司有个同事用python写了个脚本用于清理..., 想了下, 如果单在linux下使用直接用shell就足够了.. 遂写了个...<br /> <br /> #!/bin/sh#remove appoint dir all the .svnif [ $# != 1 ]; then echo "must input clean dir";else find $
2011-04-29 19:09:00 1357 1
原创 lua经验 math.huge
<br /> 偶然间因为一个死循环的BUG发现, 原来math.huge通过C接口luaL_checkint获取的结果为0 ... 备忘 :)
2011-04-27 22:21:00 4788
原创 非侵入式mongodb async find patch
<br /> 前阵子为mongodb的cdriver添加了一个async find补丁, 不过简陋的将源码插入其中.. , 觉得怎么看怎么别扭... 如果官方更新了... 就容易悲剧了, 所以, 为了自己不用老是跟着改动, 就单独的将patch分离出来, 没什么技术含量, 仅仅作为记录.<br /> <br /> mongo_async.h<br /> //base info: create by final/*effect: mongo db async query patch***
2011-04-19 23:31:00 1657
原创 Lua pairs与ipairs效率分析
介于大家目前有些人比较关心 lua table中pairs 和 ipairs的效率问题, 特此研究了一下... 如有不正 还需指出.. 首先来看下 lua中table的结构定义:table中分为2个存储空间, 一个是线性数组空间(TValue *array), 和一个hash空间(Node *node) 当我们使用 pairs 和 ipairs 会产生两种不同的迭代器, 一个仅仅遍历数组, 一个遍历所有的值所以, 当调用ipairs的时候, 在线性数组中遇到第一个nil时便停止遍历, 不管后面还是否有值,
2011-04-19 17:06:00 10890 2
原创 网络异常处理
这几天总结了下, 对于网络断开连接时的注意事项. 总体来说有三种情况: 1. 对端网络异常, 这时候可以从读写时发现 2. 用户层写buff满 3. 用户主动关闭 为了保证更少的暴露接口给用户, 经过自己的推敲, 发现当出错时, 走正常的通知模式, 抛出一个error给用户回调, 用户看情况清理自己的数据, 网络层会定期询问该用户是否可以被删除, 因为此时可能会有数据库操作被挂起~ :) 这个定期询问的函数也是个回调, 需要用户自己编写~ , 通常用来检测是否有正在挂起的数据库操作~ ,
2011-04-17 00:41:00 1335
转载 gcc 编译选项
<br /><br />发现一个好贴... 赶紧收藏~ 有待今后研究学习~ <br />GCC 函式追蹤功能 finstrument-functions __attribute__ +用 Graphviz 可视化函数调用 <br />http://blog.csdn.net/unbutun/archive/2008/08/29/2849048.aspx
2011-04-16 12:00:00 504
原创 hash_tbl 改造续..
<br /> 经过一晚上的倒腾... 终于重构好了hash_tbl, 思路和之前想的一样~ , 从索引头到冲突链都使用数组实现~ 结构如下:<br /> <br /> <br /> <br /> 原来协议层也用的hash_tbl进行管理, 但因为协议是连续自增ID, 不存在动态变化的可能, 所以这块不使用hash_tbl管理了, 直接用静态数组进行映射.<br /> 这样的话, 只有逻辑层发送协议的位置有通过hash_tbl查找具体的net_buff, 不过这块是hash_find, 并无大碍. 因
2011-04-15 16:27:00 654 1
原创 hash_tbl 结构改造
<br /> 这两天正在为网络层制作负载均衡策略, 这个具体的细节会在今后逐步写出, 先来说说在测试负载均衡时遇到的一点问题.<br /> <br /> 昨晚改好后, 负载均衡策略可以按照预期逻辑层指定的返回值进行继续通知或者挂起~, 从而让优先级更高连接类型获得更多的执行权. 但是测试的结果并不像预期那样美好, 虽然服务器不会因为buff不足而被迫断开连接, 但是运行效率依然和以前一样稳步下降, 这让我着实很恼火..., 于是直接加上 -pg参数开始profile...<br /> <br /> p
2011-04-14 14:10:00 653
原创 网络负载平衡改造(续2)
昨天有点事耽误了... 今天又接着改造... , 在改造的时候遇到了一个之前就曾经发生的问题: 因为epoll_wait和event处理使用2个不同的线程, 这就导致了, 有可能出现, 当event处理线程释放该connection, 但是epoll_wait线程已经获取了该event通知, 并压入event处理线程, 当event处理线程再次处理该事件时, 会访问非法空间一致崩溃 ... 想了半天, 终于有了一个好想法, 因为现在所有的事件都有一个event_type, 但其容量很小, 这样就可以将
2011-04-13 19:05:00 683
原创 网络负载平衡改造(续)
<br /> 昨晚, 构思了一下, 稍微写了一些, 总结一下经验和遇到的问题.<br /> <br /> 首先, 为了既能平衡调度各个连接, 又能保持对epoll_wait的接受, 需要额外增加一个调度线程, 而原有调用epoll_wait的线程只用于投递请求, 请求模式依然使用LT, 这里使用ET模式可能会引发一些不必要的BUG.<br /> 多增加了线程, 就要更加注意防范引用到野指针的危险, 这里对net_buff增加引用计数, 初始计数2, 当网络错误, 或对端关闭时, 逐步关闭socket通
2011-04-12 14:23:00 730
原创 改造网络负载平衡
原因: 经过前几天的压力测试, 发现网络层处理消息有些问题, 定长的BUFF导致响应客户端请求的数量要远高于数据库返回的响应(因为客户端发送的协议数据长度很小, 而数据库返回的却很大, 在同样长度的BUFF内可以容纳更多的客户端请求, 打个比方, 平均响应100条客户端请求, 才能响应一条数据库请求, 这势必会造成服务器内部堆积了大量的不均衡请求对, 最终有可能导致服务器挂掉), 所以打算近期进行改造. 思路: 如果能让每条连接响应的协议数量可控, 则可以大大减少这种情况的发生. 那
2011-04-11 19:03:00 782
原创 socket IP地址转换接口
<br />#include <sys/socket.h><br /> #include <netinet/in.h><br /> #include <arpa/inet.h><br /> <br />int inet_aton(const char *cp, struct in_addr *inp);<br /> in_addr_t inet_addr(const char *cp);<br />char *inet_ntoa(struct in_addr in);<b
2011-04-11 13:53:00 958
原创 mongodb 增加数据库连接
<br /> 只是一篇记录性的, 没有任何技术可言...<br /> 昨天下午由于建立一条数据库连接造成数据库连接断开... 无奈之举, 我建立了更多的连接用于异步查询, 这回数据库倒是很乖巧了... 不过引擎呈现莫名其妙的波动.... 导致我不得不放慢客户端发送频率... 后续还有待查证具体原因...
2011-04-11 10:05:00 1115
原创 mongodb 压力测试问题
昨晚在做压力测试的时候, 同步查询经过了4亿次的调用没有发现问题.. 平均每秒5000次查询请求. 但是在异步查询时, 发现了一个奇怪的现象, 数据库链接buf很快就处于阻塞状态... 导致请求都堆积在缓冲里... 很快数据库就会抛出一个断言错误... : [conn25] Assertion: 10334:Invalid BSONObj size: 0 (0x00000000) first element: est.user: ?type=1160x55ece9 0x4ede7e 0x5396d8
2011-04-10 14:13:00 4648 2
原创 mongodb 异步查询(续)
承接前一篇, 服务器采用C编写, 逻辑层使用LUA, 搭配开源mongodb c driver开发异步查询接口. 有了上一次的改造, 这次来说说是如何使用改造后的接口实现异步查询. 首先, 再来理清一下思路, 现在的一次完整同步查询被拆分成3个步骤: 1.创建并发送请求 2.接受返回结果消息头 3.接受返回结果数据并做相应的回调处理 为此我们需要2个结构来处理这个过程: typedef struct { int type; mongo
2011-04-08 02:53:00 5754 1
原创 mongodb C driver的异步查询
最近在选用NOSQL数据库的时候最终选择了mongdb, 感觉其各方面都很优秀, 于是为服务器增加了一组mongodb的接口, 以方便LUA逻辑层使用. 驱动方面选用了官方指定的C DRIVER, 大家有兴趣的可以直接去mongodb的官网上查找, 不过查看了其mongo_find接口发现为同步调用, 这在服务器并发应用方面会受到限制, 通常服务器为了提高并发处理效率会使用异步接口. 开始的时候比较偷懒, 在其官网上留言想让其driver开发人员帮忙添加异步调用接口, 这事情也就先放下了... 2天过
2011-04-02 03:12:00 4860 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人