91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

  • 大小: 14KB
    文件類型: .zip
    金幣: 2
    下載: 0 次
    發布日期: 2021-06-03
  • 語言: C/C++
  • 標簽: c++??負載均衡??

資源簡介

c++負載均衡源碼。該程序能從所有邏輯服務器中選取負荷最小的一臺來處理新到的客戶端。使用了有限狀態機、進程池、有限狀態機、統一信號源以及高效數據結構來提高其性能。有助于將所學的東西融會貫通起來。

資源截圖

代碼片段和文件信息

#include?
#include?
#include?
#include?“conn.h“
#include?“log.h“
#include?“fdwrapper.h“

conn::conn()
{
????m_srvfd?=?-1;
????m_clt_buf?=?new?char[?BUF_SIZE?]; //客戶端緩沖區
????if(?!m_clt_buf?)
????{
????????throw?std::exception();
????}
????m_srv_buf?=?new?char[?BUF_SIZE?];
????if(?!m_srv_buf?)
????{
????????throw?std::exception();
????}
????reset();
}

conn::~conn()
{
????delete?[]?m_clt_buf;
????delete?[]?m_srv_buf;
}

void?conn::init_clt(?int?sockfd?const?sockaddr_in&?client_addr?) //客戶端socket?地址
{
????m_cltfd?=?sockfd;
????m_clt_address?=?client_addr;
}

void?conn::init_srv(?int?sockfd?const?sockaddr_in&?server_addr?) //服務器端socket地址
{
????m_srvfd?=?sockfd;
????m_srv_address?=?server_addr;
}

void?conn::reset()
{
????m_clt_read_idx?=?0;
????m_clt_write_idx?=?0;
????m_srv_read_idx?=?0;
????m_srv_write_idx?=?0;
????m_srv_closed?=?false;
????m_cltfd?=?-1;
????memset(?m_clt_buf?‘\0‘?BUF_SIZE?);
????memset(?m_srv_buf?‘\0‘?BUF_SIZE?);
}

RET_CODE?conn::read_clt()
{
????int?bytes_read?=?0;
????while(?true?)
????{
????????if(?m_clt_read_idx?>=?BUF_SIZE?)
????????{
????????????log(?LOG_ERR?__FILE__?__LINE__?“%s“?“the?client?read?buffer?is?full?let?server?write“?);
????????????return?BUFFER_FULL;
????????}

????????bytes_read?=?recv(?m_cltfd?m_clt_buf?+?m_clt_read_idx?BUF_SIZE?-?m_clt_read_idx?0?); //???
????????if?(?bytes_read?==?-1?)
????????{
????????????if(?errno?==?EAGAIN?||?errno?==?EWOULDBLOCK?) //?非阻塞情況下:?EAGAIN表示沒有數據可讀,請嘗試再次調用而在阻塞情況下,如果被中斷,則返回EINTR;??EWOULDBLOCK等同于EAGAIN
????????????{
????????????????break;
????????????}
????????????return?IOERR;
????????}
????????else?if?(?bytes_read?==?0?)??//連接被關閉
????????{
????????????return?CLOSED;
????????}

????????m_clt_read_idx?+=?bytes_read;
????}
????return?(?(?m_clt_read_idx?-?m_clt_write_idx?)?>?0?)???OK?:?NOTHING;
}

RET_CODE?conn::read_srv()
{
????int?bytes_read?=?0;
????while(?true?)
????{
????????if(?m_srv_read_idx?>=?BUF_SIZE?)
????????{
????????????log(?LOG_ERR?__FILE__?__LINE__?“%s“?“the?server?read?buffer?is?full?let?client?write“?);
????????????return?BUFFER_FULL;
????????}

????????bytes_read?=?recv(?m_srvfd?m_srv_buf?+?m_srv_read_idx?BUF_SIZE?-?m_srv_read_idx?0?);
????????if?(?bytes_read?==?-1?)
????????{
????????????if(?errno?==?EAGAIN?||?errno?==?EWOULDBLOCK?)
????????????{
????????????????break;
????????????}
????????????return?IOERR;
????????}
????????else?if?(?bytes_read?==?0?)
????????{
????????????log(?LOG_ERR?__FILE__?__LINE__?“%s“?“the?server?should?not?close?the?persist?connection“?);
????????????return?CLOSED;
????????}

????????m_srv_read_idx?+=?bytes_read;
????}
????return?(?(?m_srv_read_idx?-?m_srv_write_idx?)?>?0?)???OK?:?NOTHING;
}

RET_CODE?conn::write_srv()
{
????int?bytes_write?=?0;
????while(?true?)
????{
????????if(?m_clt_read_idx?<=?m_clt_write_idx?)
????????{
????????????m_clt_read_idx?=?0;
????????????m_clt_write_idx?=?0;
????????????return?BUFFER_EMPTY;
????????}

????????bytes_write?=?s

?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2018-08-02?03:39??springsnail\
?????文件?????????284??2016-06-04?11:57??springsnail\config.xml
?????文件????????4576??2018-07-27?13:43??springsnail\conn.cpp
?????文件?????????795??2018-07-27?09:45??springsnail\conn.h
?????文件????????1091??2013-02-26?06:56??springsnail\fdwrapper.cpp
?????文件?????????433??2013-02-26?08:11??springsnail\fdwrapper.h
?????文件????????1543??2016-06-04?11:57??springsnail\log.cpp
?????文件?????????233??2016-06-04?11:57??springsnail\log.h
?????文件????????7876??2018-07-31?00:47??springsnail\main.cpp
?????文件?????????437??2013-02-26?06:54??springsnail\Makefile
?????文件????????9021??2018-07-31?00:54??springsnail\mgr.cpp
?????文件?????????969??2018-08-01?11:52??springsnail\mgr.h
?????文件???????16090??2018-08-02?03:13??springsnail\processpool.h

評論

共有 條評論