ubuntu 服務器軟件部署從零開始

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)重啓系統,就不會進入圖形界面了

相關文章
相關標籤/搜索