libev

本文介绍了libev,一个简洁且高性能的异步事件库,对比了libevent和libuv。libev在Linux下利用epoll,Windows上使用其他机制。文章通过一个简单的Buffer类展示了libev如何用于网络服务器,并强调了异步架构设计原则:回调函数应快速执行,尽量使用库的内部时间机制。

开始之前先看一下libevent libev libuv,参考附录1.

本着我自己的个性,我喜欢简单的东西,越简单越好,越傻越好,所以在此我考虑libev,只是tmd,libev的官网打不开,真是无语了。

上例子:

buffer.h

 
#include<iostream>
#include<stdio.h>
#include<string.h>
 
using namespace std;
#define default_buf_size 256
class Buffer
{
    public:
        Buffer()
        {
            buf = new char[default_buf_size];
            buflen = default_buf_size;
        }
        ~Buffer()
        {
            delete[] buf;
        }
        void set_write_buf_size(int needsize)
        {
            int buf_size = writeIdx + needsize;
            if(buf_size <= buflen)
                return;                
            if(needsize < readIdx)
            {
                memmove(buf, buf+readIdx, writeIdx-readIdx);
                writeIdx -= readIdx;
                readIdx = 0;
                return;
            }
            while(buflen < buf_size)
                buflen *= 2;
 
            char *oldbuf = buf;
            buf = new char[buflen];
            memcpy(buf, oldbuf+readIdx, writeIdx-readIdx);
            delete[] oldbuf;
            writeIdx -= readIdx;
            readIdx = 0;
            
        }
        int get_readable_size()
        {
            return writeIdx-readIdx;
        }
        int get_writeable_size()
        {
            return buflen-writeIdx;
        }
 
        void writebuf(void *data, int datalen)
        {
            set_write_buf_size(datalen);
            memcpy(buf+writeIdx, data, datalen);
            writeIdx += datalen;
        }
 
 &n

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值