达州市网站建设_网站建设公司_ASP.NET_seo优化
2026/1/22 8:30:12 网站建设 项目流程

前言:

从正式接触编程到现在 大半年终于开始自己完完整整搞一个项目。

我对这个项目的定义是:它的功能很玩具 但是它的可优化点很高 似乎基于c/s架构的东西优化点就非常多 所以实现它就似乎是在给洋娃娃套上机甲一样 对于目前的我来说是这样的。

对于第一次搞项目的我产生了很多疑问

我很困扰的是,我系统的学完了那些MySQL跟redis之类的东西,但是我似乎那些命令记得一点都不牢 所以我在想我是不是应该在做项目的时候慢慢就水到渠成了?

我问学长们 我说写项目写到什么程度才能把这个项目放到简历上?

他们告诉我标准是能应对面试官的一些问题,比如他会问你在项目中遇到了什么困难。要回答出来 但是, 最好是自己手搓出来,就是完全由自己构思,但是我现在都水平似乎,就你让我拿脑袋空想我要做一个c/s的在线预约系统,我似乎没有办法想出来。我最多只会做出来c/s的最基本的代码。剩下的让我空想根本想不出来怎么继续写下去。 标准的项目答案代码我这里也有的,但是我怕我这样一看就没有自己的思考过程,那这个项目就似乎没什么说法了,而且更何况我是想把这个项目放在简历上,所以我就很困扰。

现在广为流传tinywebserver已经烂大街 什么系统系统已经烂大街 放在简历上一定要放个拿彩的 开源的项目 但对于现在的我来说 如果这类被人说为玩具的项目我还不能够实现 那何谈开源?

所以一切的一切 还是先动手码出来项目的架构再说 只有做出来才有答案

ser.h

 #include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
const int listenmax=10;
class socket_listen{
public:socket_listen(){sockfd=-1;m_port=6000;m_ips="127.0.0.1";}socket_listen(string ips,short port):m_ips(ips),m_port(port){sockfd=-1;}bool socket_init();int accept_client();void set_base(struct event_base*base){this->base=base;}int getsockfd()const{return sockfd;}struct event_base* get_base()const{return base;}
private:int sockfd;short m_port;string m_ips;struct event_base * base;
};
class socket_con{
public:socket_con(int fd):c(fd){c_ev=NULL;}void set_ev(struct event*ev){c_ev=ev;}~socket_con(){event_free(c_ev);close(c);}void recv_data();
private:int c;struct event* c_ev;
};

ser.cpp

 #include"ser.h"
//socket_listen
bool socket_listen::socket_init(){sockfd=socket(AF_INET,SOCK_STREAM,0);if(-1==sockfd)return false;struct sockaddr_in saddr;memset(&saddr,0,sizeof(saddr));saddr.sin_family=AF_INET;saddr.sin_port=htons(m_port);saddr.sin_addr.s_addr=inet_addr(m_ips.c_str());int res=bind(sockfd,(struct sockaddr*)&saddr,sizeof(saddr));if(-1==res){perror("绑定失败\n");close(sockfd);return false;}res=listen(sockfd,listenmax);if(res==-1)return false;return true;
}
int socket_listen::accept_client(){int c=accept(sockfd,NULL,NULL);return c;
}
//socket_con
void socket_con::recv_data(){char buff[256]={0};int n=recv(c,buff,255,0);if(n<=0){cout<<"client close"<recv_data();}
}
void SOCK_LIS_CALLBACK(int sockfd,short ev,void *arg){socket_listen* p=(socket_listen*)arg;if(p==NULL)return;if(ev&EV_READ){ //处理读事件int c=p->accept_client();if(c==-1)return;cout<<"accept:c="<get_base(),c,EV_READ|EV_PERSIST,SOCK_CON_CALLBACK,q);if(c_ev==NULL){close(c);delete q;return;}q->set_ev(c_ev);//添加到libeventevent_add(c_ev,NULL);}
}
int main(){//监听套接字socket_listen socket_ser;if(!socket_ser.socket_init()){cout<<"socket init err!"<

cli.h

#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
const int offset=2;
enum op_type{DL=1,ZC,CKYY,YD,CKYD,QXYD,TC};
class socket_client{
public:socket_client(){sockfd=-1;ips="127.0.0.1";port=6000;dl_flg=false;user_op=0;runing=true;}socket_client(string ips,short port){sockfd=-1;this->ips=ips;this->port=port;dl_flg=false;user_op=0;runing=true;}void print_info();~socket_client(){close(sockfd);}bool connnect_server();void user_register();void user_login();void run();
private:string ips;short port;int sockfd;bool dl_flg;string username;string usertel;int user_op;bool runing;
};

cli.cpp

  #include"cli.h"
bool socket_client::connnect_server(){sockfd=socket(AF_INET,SOCK_STREAM,0);if(-1==sockfd){perror("create socket err!\n");return false;}struct sockaddr_in saddr;memset(&saddr,0,sizeof(saddr));saddr.sin_family=AF_INET;saddr.sin_port=htons(port);saddr.sin_addr.s_addr=inet_addr(ips.c_str());int res=connect(sockfd,(struct sockaddr*)&saddr,sizeof(saddr));if(res==-1){perror("connect ser err!\n");return false;}cout<<"connect to server success"<>user_op;user_op+=offset;}else{cout<<"---未登陆-----游客-----"<>user_op;if(user_op==3)user_op=TC;}
}
void socket_client::user_register(){cout<<"请输入用户手机号码:"<>usertel;cout<<"请输入用户名"<>username;string passwd,tmp;cout<<"请输入密码:"<>passwd;cout<<"请再次输入密码"<>tmp;if(usertel.empty()||username.empty()){cout<<"手机或用户名不能为空"<

目前可优化点:

 高优先级(影响功能正确性)

  1. 数据完整性保障

    • send可能只发送部分数据,需要循环发送确保完整

    • recv可能只接收部分数据,需要循环接收确保完整

    • 考虑定义应用层协议(如:长度+数据)

  2. 资源管理与内存安全

    • socket_con的析构需要验证是否正确释放资源

    • 考虑使用智能指针替代裸指针管理动态对象

 中优先级(影响性能与并发)

  1. Socket非阻塞化

    • 服务端监听socket设为非阻塞

    • 客户端连接socket设为非阻塞

    • 处理EAGAIN/EWOULDBLOCK错误码

  2. Libevent性能优化

    • 从LT模式切换到ET模式

    • 使用Libevent2新API替代老API

    • 配置高性能事件驱动后端

 低优先级(代码质量与扩展性)

  1. 代码结构优化

    • 封装数据发送/接收的通用函数

    • 错误处理统一化

    • 日志系统完善

  2. 功能增强

    • 超时机制与心跳包

    • 连接池管理

    • 数据序列化协议优化

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询