自G-Socket0.88版开源以来,得到很多朋友的支持。从1.0版本至2.0之前,内核几乎没有改变,经过多处的应用其稳定性和效率表现是相当不错的。这几年的经验总结成一句话:服务器程序不是有了一个好的Iocp通信组件就能玩转的。

很多情况下,我们都会遇到下面的问题:

1 致命的锁

又死锁了,怎样高效而又不死锁?是不是使用无锁算法就能解决?

2 无序的数据

为什么服务器接收的数据包会丢包?为什么客户端收到的数据乱序了?

3 野指针

别说多线程了,我都单线程了,为什么还有野指针?

4 低效的IO

为什么CPU使用率这么低,服务器怎么还这么卡?

5 恶劣的网络环境

为什么客户端都已经断线了,服务器端的客户链接数量不是0?

6 该死的客户端

我服务器都是IOCP了,怎么客户端接收的效率还这么低?

7 巨大数据积压

为什么通信模块有这么大的数据积压耗费这么多的内存?

8 莫名的异常

不能实时调式不能24小时监视,怎么分析这些服务程序异常?

下面解决问题的提示点,有些只有“资深”才能发现了:

1不是使用无锁算法就能解决死锁问题,而是良好的线程架构体系。

2 多线性并不是完全的多线程,它是针对多个连接而言,不是针对单个的连接对象,起码在粘包处理和数据发送这方面。

3 复杂的服务端程序有很多队列,必须要保证所有网络和用户请求等事件能被有序(按发生的事件先后顺序)被处理!

4 你是不是在逻辑线程里面直接IO操作了?

5 要有应用层面的心跳包,不要完全信任Socket底层的下的心跳机制。

6 你是不是在客户端使用了Window Message Mode的通信组件了,而且在消息事件里面解密处理数据了?

7 但凡是异步通信的都会有Copy和List,要么是接收快处理慢,要么是发送快客户端接收慢,或者客户连接的网络环境恶劣,导致数据队列积压,也就是生产和消费不平衡。

8 除了日志,还是日志,一个再牛X的程序员,也要写完善的日志体系。

Server(Iocp)的那些烦恼的更多相关文章

  1. 你还在为无法完美卸载SQL Server 2008 R2而烦恼吗?

    你还在为无法完美卸载SQL Server 2008 R2而烦恼吗? 本文摘抄来自:http://blog.csdn.net/u013058618/article/details/50265961  小 ...

  2. Server Develop (八) IOCP模型

    IOCP模型 IOCP全称I/O Completion Port,中文译为I/O完成端口.IOCP是一个异步I/O的Windows API,它可以高效地将I/O事件通知给应用程序,类似于Linux中的 ...

  3. [转]一个基于完成端口的TCP Server Framework,浅析IOCP

    [转]一个基于完成端口的TCP Server Framework,浅析IOCP http://www.cppblog.com/adapterofcoms/archive/2010/06/26/1187 ...

  4. SQL SERVER 2005 DBCC IND命令说明

    每天笑一笑,烦恼少一倍 轻松一笑!狗狗被调戏:http://947kan.com/video/player-52952-0-0.html ------------------------------- ...

  5. iocp 小例子

    2016-08-3116:44:09 server 端 /******************************************************************* aut ...

  6. 如何清除SQL Server Management Studio的最近服务器列表

    SQL Server Management Studio (SSMS) 的"连接到服务器"对话框会记录用户所有访问过的服务器名称,这个功能对于经常连接多个数据库的人来说确实挺方便的 ...

  7. 简单说一个IOCP不好的地方

    感谢rulary的指正!博文中我对IOCP的理解是有误的,正确的方式请见评论区rulary的回复! 由于项目实际设计的需要,最终IO事件处理没有采用IOCP,而是采用了NT6.0引入的WSAPoll, ...

  8. IOCP入门

    完成端口(Completion Port)详解 此文讲解最好,也很全面一下其他文章看看就行,也可不看. 单句柄数据,单IO数据 此文讲述比较清晰,可以辅助理解上文. IOCP编程之基本原理:http: ...

  9. 「ubuntu」通过无线网络安装Ubuntu Server,启动系统后如何连接无线网络

    接触Ubuntu系统不久,发现无线网络环境下安装Ubuntu Server一个不太人性化的设计:在安装过程中选择无线网卡,即使用无线网络安装(此时需要选择Wi-Fi网络并输入密码),但系统安装完成重启 ...

随机推荐

  1. jquery实现仿商品星级评价

    一,HTML部分 <div id="rating-star">     <a href="#">0</a>     < ...

  2. 用MVC4+EF改写XXX系统的计划--前言

    感觉自己工作了三年,重来没有自己一个人写一个项目,从开始的策划,功能需求,业务逻辑,扩展,性能优化等等方面去做,从今天起准备发比半年时间重写XXX项目,每天中午和晚上分别花半个小时和一个小时开发,周末 ...

  3. 将整数数组按就分成2个部分,数组坐标为奇数,右边为偶数(java实现)

    方法1: 若不考虑性能: 使用一个新的数组target 遍历原数组 发现奇数则复制到target中 然后偶数 最后显示 import java.util.Arrays; public class Sp ...

  4. 合理的使用size_t可以提高程序的可移植性和代码的可读性,让你的程序更高效。

    最近研读STL源码时,发现里面有很多ptrdiff_t类型的数据,这与size_t的作用类似.以下是一篇关于size_t等平台无关类型的作用,写得很清楚.特将其记录下来. http://blog.cs ...

  5. pom文件详解

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...

  6. Sublime Text2 快捷键设置

    设置Tab两个空格: 点击 Preference -> Settings-User "tab_size":2, "translate_tabs_to_spaces& ...

  7. ps aux 中的状态说明

    D    不可中断     Uninterruptible sleep (usually IO)R    正在运行,或在队列中的进程S    处于休眠状态T    停止或被追踪Z    僵尸进程W  ...

  8. View的工作原理(一)——Measure

    一.认识ViewRoot和DecorView 当Activity对象被创建的时候,会将DecorView添加到Window中,同时创建ViewRootImpl对象(ViewRoot对应于ViewRoo ...

  9. Lotto--poj2245

    Lotto Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 6605   Accepted: 4185 Description ...

  10. Masstransit开发基于消息传递的分布式应用

    使用Masstransit开发基于消息传递的分布式应用 Masstransit作为.Net平台下的一款优秀的开源产品却没有得到应有的关注,这段时间有机会阅读了Masstransit的源码,我觉得我有必 ...