這次主要是想上傳一下**,寫了乙個負載均衡器。
//客戶端**:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
const int buff_size = 128;
const char *ip = "127.0.0.1";
int conn(int port)
return sockfd;
}int main(int argc,char *ar**)
else
char buf[5];
memset(buf,0,5);
int n = recv(load_sockfd,buf,5,0);
if(n <= 0)
int port = atoi(buf);
printf("port = %d\n",port);
n = send(load_sockfd,"ok",2,0);
if(n<0)
close(load_sockfd);
int sockfd = conn(port);
if(sockfd<0)
while(1)
memset(buff,0,127);
n = recv(sockfd,buff,2,0);
if(n <= 0)
printf("recv = %s\n",buff);
}close(sockfd);
return 0;
}均衡器**:#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
const int buff_size = 128;
const int max_event_numble = 100;
const int server_numble = 5;
const char *ip = "127.0.0.1";
pthread_mutex_t mutex;
typedef struct node
node;
node server_data[5] =
, ,,,
,};int min_server_data()
}++server_data[j].count;
printf("count port\n");
for(i = 0; i<5; ++i)
return j;
}void *worker(void *arg)
memset(buff,0,5);
n = recv(cli_sockfd,buff,2,0);
if(n<0)
printf("buff = %s\n",buff);
close(cli_sockfd);
}int main(int argc,char *ar**)
pthread_mutex_init(&mutex,null);
int port = atoi(ar**[1]);
int listenfd = socket(af_inet,sock_stream,0);
assert(listenfd>=0);
struct sockaddr_in saddr;
saddr.sin_family = af_inet;
inet_pton(af_inet,ip,&saddr.sin_addr);
saddr.sin_port = htons(port);
int res = bind(listenfd,(struct sockaddr*)&saddr,sizeof(saddr));
assert(res != -1);
res = listen(listenfd,5);
assert(res != -1);
while(1)
close(listenfd);
pthread_mutex_destroy(&mutex);
return 0;
}伺服器**:#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
const int buff_size = 128;
const int max_event_numble = 100;
const char *ser_ip = "127.0.0.1";
typedef struct fds
fds;
/*將檔案描述符設定為非阻塞的*/
int setnonblocking(int fd)
/*將檔案描述符fd的epollin事件註冊到核心事件表中,引數enable_et指定是否對fd
採用epolloneshut事件*/
void addfd(int epollfd,int fd,int enable_et)
epoll_ctl(epollfd,epoll_ctl_add,fd,&event);
setnonblocking(fd);
}/*重置fd上的事件,這樣操作以後,儘管fd上的epolloneshot事件被註冊,但是作業系統仍然會觸發fd上的epollin事件,且只觸發一次*/
void reset_oneshot(int epollfd,int fd)
void *worker(void *arg)
else if(n<0)
close(cli_sockfd);
break;
}else
memset(buff,0,buff_size);}}
}int main(int argc,char *ar**)
int port = atoi(ar**[1]);
int listenfd = socket(af_inet,sock_stream,0);
assert(listenfd>=0);
struct sockaddr_in saddr;
saddr.sin_family = af_inet;
inet_pton(af_inet,ser_ip,&saddr.sin_addr);
saddr.sin_port = htons(port);
int res = bind(listenfd,(struct sockaddr*)&saddr,sizeof(saddr));
assert(res != -1);
res = listen(listenfd,5);
assert(res != -1);
struct epoll_event events[max_event_numble];
int epollfd = epoll_create(5);
assert(epollfd != -1);
addfd(epollfd,listenfd,0);
while(1)
else if(events[i].events & epollin)}}
close(listenfd);
return 0;
}
負載均衡器
負載均衡器f5 負載均衡是高可用網路基礎架構的關鍵元件,通常用於將工作負載分布到多個伺服器來提高 應用 資料庫或其他服務的效能和可靠性。負載均衡器可以處理什麼樣的請求?負載均衡器的管理員能主要為下面四種主要型別的請求設定 規則 負載均衡器如何選擇要 的後端伺服器?負載均衡器一般根據兩個因素來決定要將...
負載均衡器簡介
負載均衡器可以根據實際的響應時間制定優先順序交付決策,從而實現高效能 智慧型化流量管理,達到最佳的伺服器群效能。採用第七層應用控制還可以減少通訊高峰期的錯誤訊息,因為差錯控制和流量管理技術可以偵測到一些錯誤資訊,並透明地將會話重定向到另乙個伺服器,使使用者順利地進行使用。例如,伺服器 a不可用或者資...
LVS負載均衡器
lvs是乙個開源的軟體,可以實現linux平台下的簡單負載均衡。lvs是linux virtual server的縮寫,意思是linux虛擬伺服器。優點 1 開源,免費 2 在網上能找到一些相關技術資源 3 具有軟體負載均衡的一些優點 缺點 1 具有開源產品常有的缺點,最核心的就是沒有可靠的支援服務...