1,编写服务器软件 server
1)使用epoll异步多线程架构,解决打开文件描述符个数的限制 在/etc/security/limits.conf 添加 * - nofile 50000
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 = 0
b:vi /etc/profile 添加ulimit -c unlimited 解开core文件大小的限制
c: 执行下面命令,source /etc/profile;sudo sysctl -p;使配置永久生效
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)重启系统,就不会进入图形界面了