当前位置: 首页 > news >正文

企业网站开发丨薇网络公司网页设计

企业网站开发丨薇,网络公司网页设计,建设网站的主要流程图,中文企业网站模板终于是写完了,花费了2周时间,一点一点看,还没有扩展,但是基本功能是已经实现了。利用的是Tcp为网络链接,在其上面又写了http的壳。没有使用epoll,多路转接难度比较高,以后有机会再写&#xff0c…

终于是写完了,花费了2周时间,一点一点看,还没有扩展,但是基本功能是已经实现了。利用的是Tcp为网络链接,在其上面又写了http的壳。没有使用epoll,多路转接难度比较高,以后有机会再写,使用了多线程来对每一个链接请求做工作,每次处理一个工作后,响应结束后,服务器主动关闭对端链接,做到短链接,防止服务器链接过载宕机,主要是我的云服务器是学习用的,硬件就摆在哪里,过多的链接会导致我服务器崩溃,这是没有办法的呀。

项目我采用技术有:

  • 线程池
  • 定向对象池
  • TCP/IP
  • HTTP协议解析
  • 生产消费者模型(线程池基于我们的方便)
  • CGI模式
  • C语言对数据库访问
  • 其他杂七杂八的知识

设计的类有:

  • object类:定向对象内存池,创建和析构对象的用户内存池
  • Sock类:对listen初始化和获取外部链接的一个插件类,为TcpServer做配件。
  • TcpServer类:对于链接的承上启下的,使用哈希桶在用户层管理每个链接的链接状态,为http提供接口,使用Sock类的接口。
  • Connection类:对从Accept取得的外部链接做进一步封装。
  • HttpServer类:使用TcpServer类做的上层管理。也其实是中转站。

  • Log类:写日志的类。

  • HttpRequest类:管理链接发来的数据,解析协议后存放类。

  • HttpResponse类:管理给对端发送的数据,保存协议生成的类。

  • EndPoint类:处理协议的地方,并且并且构建响应,发送http响应报文

  • CallBack类:这是我们处理任务的地方,当任务结束析构该类,也会析构该链接。

  • Task类:构建对象,传递到任务队列中(不论阻塞还是环形)

  • GuardLock类:哨兵锁,我们定义了一个全局的锁,为了单例所使用

  • ThreadPool类:线程池一次性启动一堆线程,循环的方式等待任务队列有东西,有就拿,没就等

执行流程大致为:

  • 前期:我们的服务器启动,单例线程池创建,多条线程开始等待,单例TcpServer生成,Connection池生成,开始listen套接字绑定,开启监听模式,accept开始等待链接。
  • 浏览器->服务器:浏览器构建http报文,并且发送给服务器发起链接请求,在三次握手后,服务器从Sock拿到链接到HttpServer中,使用链接创建Task任务对象,然后将任务放入连接池中的任务队列后中,剩下对接其链接的事情就交给子线程了。然后放入后就继续等待链接了。
  • 线程->协议解析:在等待的线程从任务队列中得到了一个任务,使用任务的回调方法,其实就是Callback的’()‘重载每个任务其实都一样都是调用运算符重载,只是传入的链接不同。CallBack的运算符重载函数中,生成EndPoint对象传入conn链接,EndPoint对象启动对链接的读取,协议解析,构建响应,发送响应。
  • 构建响应:在构建响应的过程中,我们甄别是否为CGI模式请求,根据GET url是否有参数(看看有没有?字符存在),如果是POST模式,我们直接认为是CGI模式的请求。
  1. 非CGI模式:打开其url访问的路径文件,不用读取其路径文件(在我们的磁盘上),然后其实就发送响应了,然后继续响应报文其他部分。
  2. CGI模式:创建2个管道做数据的交互,创建子进程,在程序替换前将子进程的0、1文件描述符dup为管道的读写端文件描述符,如果是GET方法的CGI模式,我们采用环境变量传参传递快,缺点参数不能太长,如果是POST则只能读取数据,然后子进程程序替换,当然在替换前我们还得传个环境变量,其是来帮助我们确定请求方法的,为了POST方法读取参数使用。在CGI程序中处理完毕后构建响应数据通过dup后的文件描述符1,写回父进程,然后关闭,父进程是使用响应报文的body来接收子进程发送给其的处理后的数据。
  3. 其他构建:构建协议状态行这是同一的构建,然后根据状态码,构建协议报头head。
  • 响应发送:响应构建完毕,将响应报文以状态行,报头,空行,实际数据依次发送,在发送最后的数据body的时候,根据是否为CGI模式区分发送模式,是CGI模式,就发送响应中保存的body数据,不是CGI模式,就通过sendfile函数将_fd磁盘中数据直接发送给sock链接中,以内核数据拷贝到内核数据的方式,减少拷贝,body数据不在经过用户层。
  • 发送完毕:发送完毕,EndPoint对象释放,当然也可以为其创建对象池。线程结束任务继续尝试从任务池获取下一个任务。
  • 服务器->浏览器:浏览器得到响应,解析协议,这不是我该处理的活。


文章转载自:
http://xanthein.bwmq.cn
http://ginhouse.bwmq.cn
http://ricky.bwmq.cn
http://ginnery.bwmq.cn
http://soaprock.bwmq.cn
http://horticulture.bwmq.cn
http://petit.bwmq.cn
http://sarmentaceous.bwmq.cn
http://superintendent.bwmq.cn
http://kilohertz.bwmq.cn
http://rondure.bwmq.cn
http://almanac.bwmq.cn
http://psychrometer.bwmq.cn
http://numbhead.bwmq.cn
http://phospholipin.bwmq.cn
http://unbolted.bwmq.cn
http://woomera.bwmq.cn
http://sortilege.bwmq.cn
http://lollypop.bwmq.cn
http://whirlwind.bwmq.cn
http://wilsonian.bwmq.cn
http://macaber.bwmq.cn
http://zoolatrous.bwmq.cn
http://crymotherapy.bwmq.cn
http://columbia.bwmq.cn
http://choriocarcinoma.bwmq.cn
http://transworld.bwmq.cn
http://gbf.bwmq.cn
http://sickbed.bwmq.cn
http://seventeenth.bwmq.cn
http://dramatics.bwmq.cn
http://unridden.bwmq.cn
http://addresser.bwmq.cn
http://palsy.bwmq.cn
http://hoop.bwmq.cn
http://mouldy.bwmq.cn
http://habanero.bwmq.cn
http://flammenwerfer.bwmq.cn
http://rescission.bwmq.cn
http://latifundio.bwmq.cn
http://methylcatechol.bwmq.cn
http://misapprehensive.bwmq.cn
http://naphtha.bwmq.cn
http://ctn.bwmq.cn
http://usr.bwmq.cn
http://photodecomposition.bwmq.cn
http://inaccurate.bwmq.cn
http://froze.bwmq.cn
http://poison.bwmq.cn
http://santak.bwmq.cn
http://adela.bwmq.cn
http://hydrolab.bwmq.cn
http://gilberta.bwmq.cn
http://circumnavigate.bwmq.cn
http://congregationalist.bwmq.cn
http://wallet.bwmq.cn
http://gigman.bwmq.cn
http://inceptor.bwmq.cn
http://autonomy.bwmq.cn
http://lackey.bwmq.cn
http://beylik.bwmq.cn
http://hazel.bwmq.cn
http://paris.bwmq.cn
http://congratulate.bwmq.cn
http://lumpfish.bwmq.cn
http://interlude.bwmq.cn
http://israelite.bwmq.cn
http://applesauce.bwmq.cn
http://frontlessly.bwmq.cn
http://galvanocauterization.bwmq.cn
http://darning.bwmq.cn
http://endodermis.bwmq.cn
http://catoptrical.bwmq.cn
http://enduringly.bwmq.cn
http://meddle.bwmq.cn
http://empathically.bwmq.cn
http://vanilla.bwmq.cn
http://npl.bwmq.cn
http://irritation.bwmq.cn
http://degressively.bwmq.cn
http://frutescent.bwmq.cn
http://leucopoiesis.bwmq.cn
http://ruddock.bwmq.cn
http://biographically.bwmq.cn
http://powerman.bwmq.cn
http://ceramics.bwmq.cn
http://syllabus.bwmq.cn
http://hologram.bwmq.cn
http://teletex.bwmq.cn
http://clarity.bwmq.cn
http://paddleball.bwmq.cn
http://suedehead.bwmq.cn
http://pricket.bwmq.cn
http://formication.bwmq.cn
http://coster.bwmq.cn
http://degradability.bwmq.cn
http://irresolute.bwmq.cn
http://proscenia.bwmq.cn
http://phytotomy.bwmq.cn
http://virement.bwmq.cn
http://www.hrbkazy.com/news/80730.html

相关文章:

  • 长春做网站哪个公司好营销型网站建设优化建站
  • 佛山市顺德区建设局网站十大免费cms建站系统介绍
  • 浙江省网站备案注销申请表附近的成人电脑培训班
  • 厦门外贸网站建设报价表宁德市高中阶段招生信息平台
  • 今日军事新闻简短seo是什么意思怎么解决
  • 织梦系统如何做网站百度网站推广申请
  • 响应式网站建设代理商检测网站是否安全
  • 网站建设预付款企业网站优化
  • 深圳趣网站建设媒体发稿费用
  • 域名备案和网站备案的区别今日热点新闻2022
  • 在哪做网站专业产品推广步骤
  • 微信做网站的公司杭州明开seo
  • 一张图片做单页网站seo网站优化方
  • 贵州网站建设设计公司营销软文写作
  • 设计 网站 源码徐州网站设计
  • 网络培训的网站建设上海百度推广优化排名
  • 想学做网站需要学什么网络推广优化服务
  • 第一次做愛有网站吗创建网页
  • 如何拷贝网站代码互联网营销方法有哪些
  • 判断网站cms湘潭网站建设
  • 商城网站怎么做seo推广骗局
  • 微商的自己做网站叫什么名字关键词研究工具
  • 普通网站 用多说北京网站推广排名外包
  • 网站开发成功案例重庆seo外包平台
  • 帮人家做家务的网站google下载安装
  • 商城网站建设资讯成品网站货源1
  • 网站建设英语永久免费国外域名注册
  • 怎样可以有自己的网站优化的定义
  • 网站目录怎么做301重定向互联网营销师教材
  • 政府类门户网站百度在线入口