zoukankan      html  css  js  c++  java
  • 服务器开发

      最近一直在做C++(windows sdk)的服务器开发。项目的主要性能指标为100个客户端,每隔50ms发送一个数

    据包,持续发送10000个数据包。100个终端的启动间隔为50ms,测试通过。接收数据没有性能瓶颈,在进行解码的时

    侯也没有性能瓶颈,最后发现在数据库的插入操作上出现了性能瓶颈。测试100个客户端发送完成时间为9分钟左右,解

    码时间 基本持平。但是数据库插入时间滞后5到7分钟。数据库的插入操作采用的是odbc。目前采用线程池。启动10个

    线程。服务器能达到7*24小时的连续运行要求。

      针对两个月的服务器开发进行回顾。并做了一下总。

      1,服务器的接收模型分为tcp,udp两种。针对这两种一般的可以考虑如果是udp可以采用循环接收加上线程池处理

    来进行处理。基本可以达到较高的接收性能。多用于数据包比较小。对数据敏感度不高的情况。对于tcp可以采用循环加

    线程池的方式也可以处理小数据包。这种情况多见于数据包小,密集,数据比较敏感的情况。

      2,针对服务器的处理可以分为io密集型和计算密集型。当出现io密集型的时候io就成为主要的性能压力。可以考虑

    两种方式来处理(针对windows)。一,采用windows的iocp模型。这种模型的原理基于异步io操作和系统线程池组合。

    具体的实现在网上有很多的例子。但是需要注意一下几点:

      a;对于用户自定义的数据Per_io_Data的第一项为overlapped。可以通过指针的转换来获取到更多的数据。数据包可以

    通过这个自定义结构传递。但是要求在线程池处理完成之后不能释放这个结构,可以采用GlobalAlloc来申请。

      b;乱序的问题。需要在协议中加序号。

      c;恶意攻击问题。需要及时的检测。暂时未处理。

    这种模型据说是windows的最优化的高性能服务器。还有一种方法。个人认为性能上可以还能提升。就是通过直接获取

    网卡的数据进行处理。也就是用winwcap来进行处理,这需要自己写线程池,自己做整个的架构。在windows和*iux下

    都可以实现。

      针对计算密集型需要的是简单的接收但是要求长时间的cpu占用。来处理和运算。或者是交互。

    下班了。以后再写。未完待续。。。 

  • 相关阅读:
    【2020】iOS证书(.p12)和描述文件(.mobileprovision)一键申请流程
    苹果开发者账号正在调查原因解答
    【2020最新】苹果iOS开发者到期续费流程
    【2020】联系苹果客服电话入口及步骤
    苹果电脑Transporter App及Windows上传ipa工具Appuploader
    一文学会苹果TestFlight上架详细流程
    iOS APP打包上线App Store七个步骤详解(2020版)
    技术分享 | mysql 表数据校验
    MySQL 自带的4个系统数据库的说明
    linux定时任务crontab怎样执行root命令
  • 原文地址:https://www.cnblogs.com/xingyayang/p/1800912.html
Copyright © 2011-2022 走看看