07 2011 档案

摘要:网络服务器通常要应对一些意外情况,如空连接行为,指在遇到客户端连接后不进行任何操作,并很可能在大量空连接情况下导致服务器资源耗尽而无法工作。 以下代码主要工作在连接后首次接收客户端消息的环节添加一个timer,并在指定时间后检测是否已接收到消息(验证消息环节此处略去),如果没有收到消息则可认为这是一个非正常连接,并马上断开 阅读全文
posted @ 2011-07-26 12:07 lajabs 阅读(1269) 评论(0) 推荐(0)
摘要:例子是一个很常见的boost.asio的异步执行代码,如果没认真看很容易忽略了bind参数中的"this"参数,这正是当前对象的指针!异步执行过程中另一个线程会持有这个"this"指针并在未知的时间里回调HandSend方法,而在持有这个指针的时间内,这个线程并不知道当前对象有可能已经被销毁,所以造成很低级的悬空指针案件。 阅读全文
posted @ 2011-07-26 11:24 lajabs 阅读(1412) 评论(0) 推荐(0)
摘要:假设一种环境,我们要对服务热拔插一个动态库(.so文件),所要考虑的是多线程环境的兼容,不会因为动态库替换后造成栈损毁而崩溃。这边想到的方法就是封装一个dlopen过程作为对象实例加载(见load_so.h),当发出更新动态库时重新dlopen过程,替换原先的实例,注意这个替换过程必须是温和的、无逢的,这边我们使用智能指针实现。具体更新的实现通过一个单例(见do_sth.h),调用Reload重新加载动态库。我们构造一个极简单的动态库测试:make_so.h#include "say.h"extern "C"{ void Enter(const std: 阅读全文
posted @ 2011-07-19 11:57 lajabs 阅读(2721) 评论(0) 推荐(0)
摘要:引用之前发表过的文章:http://lajabs.blog.cd/?p=342针对如下错误:terminate called after throwing an instance of 'boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector >'what(): boost::lock_error在之后不断地资料查找中发现官方解释如下,这是一系列的锁检测机制:Checked Locking StrategyWith a checked locking strat 阅读全文
posted @ 2011-07-19 11:44 lajabs 阅读(2206) 评论(0) 推荐(0)
摘要:php做为脚本语言,有时也有特殊的需求对外连接到其它服务器发送消息,简单的方法可以直接使用socket扩展,比如连接一个TCP服务器。 阅读全文
posted @ 2011-07-19 11:42 lajabs 阅读(921) 评论(0) 推荐(0)
摘要:使用共享内存方式实现一个属于php的“自旋锁”,主要特点是: 1、检测和避免死锁 2、并可以自定义锁定超时 3、可以在运行结束后自动释放锁定 4、可搜集分析锁竞争和锁等待情况 阅读全文
posted @ 2011-07-19 11:28 lajabs 阅读(1474) 评论(0) 推荐(1)