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)重启系统,就不会进入图形界面了