1,編寫服務器軟件 server
shell
1)使用epoll異步多線程架構,解決打開文件描述符個數的限制 在/etc/security/limits.conf 添加 * - nofile 50000
bash
2)使用epoll的案例服務器
res = epoll_wait(m_eFd, events, c_maxEvents, 100); for (int i = 0; i < res; ++i) { if((events[i].events & EPOLLERR) || (events[i].events & EPOLLHUP)){ //忽然掛斷或者描述符出錯 FATAL_COND((events[i].events & EPOLLERR) , "fd=%d**********", events[i].data.fd); FATAL_COND( (events[i].events & EPOLLHUP) , "fd=%d**********", events[i].data.fd); YPlayer *p = players[events->data.fd]; } fd = events[i].data.fd; if(fd <=0 || fd > c_maxFd) { // FATAL_COND(fd<=0||fd>c_maxFd, "fd=%d > maxfd=%d", fd, c_maxFd); continue; } if (fd == m_fd) { //if fd is game server int in_fd = -1; int tmpC = 0; //解決客戶端鏈接數過多時形成部分鏈接收發不了信息 while(1){ in_fd = accept(m_fd, NULL, NULL); if(in_fd == -1){ // FATAL_COND(in_fd == -1,); break; } printSocketLocalInfo(in_fd); printSocketPerrInfo(in_fd); if(in_fd > c_maxFd){ FATAL_COND(in_fd > c_maxFd,); close(in_fd); break; } } } else { if(events[i].events & EPOLLIN) { //處理進來消息 } else if(events[i].events & EPOLLOUT) { //處理寫出消息 } } }
2,測試服務器軟件
多線程
1)使用gdb調試 gdb server
架構
2)爲了瞭解程序崩掉的緣由,開啓系統產出core文件,這樣就能夠知道程序掛在什麼位置異步
a:vi /etc/sysctl.conf 添加kernel.core_pattern = /var/core/core_%e_%p_%t
kernel.core_uses_pid = 0ide
b:vi /etc/profile 添加ulimit -c unlimited 解開core文件大小的限制測試
c: 執行下面命令,source /etc/profile;sudo sysctl -p;使配置永久生效
ui
3,編寫守護進程,命令行
1)能夠監聽,並重啓咱們的服務器server,處理異常狀況
4,添加系統開機啓動項
1)新建一個腳本文件,vi /etc/init.d/start_my_server.sh
#!/bin/bash ### BEGIN INIT INFO # Provides: start my servers # Required-Start: $network # Required-Stop: $network # X-Start-Before: # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: start dataServer and lserver and gserver ### END INIT INFO #解決開機啓動項不能產生core文件的問題 source /etc/profile source /etc/sysctl.conf sudo sysctl -p #放置守護進程,啓動並監聽服務器server,千萬不能少了「&」,否則系統就會卡主的 serverDaemon &
2)加入開機啓動項 sudo update-rc.d start_my_server.sh defaults 99
3)取消開機啓動 sudo update-rc.d -f start_my_server.sh remove
4,若是服務器是桌面版,咱們能夠讓系統開機進入命令行模式,節省系統開銷
1)vi /etc/default/grub 將GRUB_CMDLINE_LINUX_DEFAULT="quiet splash" 改成GRUB_CMDLINE_LINUX_DEFAULT="quiet splash text"
2)執行命令,sudo update-grub; sudo update-grub2;
3)重啓系統,就不會進入圖形界面了