Server(Iocp)的那些烦恼
自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)的那些烦恼的更多相关文章
- 你还在为无法完美卸载SQL Server 2008 R2而烦恼吗?
你还在为无法完美卸载SQL Server 2008 R2而烦恼吗? 本文摘抄来自:http://blog.csdn.net/u013058618/article/details/50265961 小 ...
- Server Develop (八) IOCP模型
IOCP模型 IOCP全称I/O Completion Port,中文译为I/O完成端口.IOCP是一个异步I/O的Windows API,它可以高效地将I/O事件通知给应用程序,类似于Linux中的 ...
- [转]一个基于完成端口的TCP Server Framework,浅析IOCP
[转]一个基于完成端口的TCP Server Framework,浅析IOCP http://www.cppblog.com/adapterofcoms/archive/2010/06/26/1187 ...
- SQL SERVER 2005 DBCC IND命令说明
每天笑一笑,烦恼少一倍 轻松一笑!狗狗被调戏:http://947kan.com/video/player-52952-0-0.html ------------------------------- ...
- iocp 小例子
2016-08-3116:44:09 server 端 /******************************************************************* aut ...
- 如何清除SQL Server Management Studio的最近服务器列表
SQL Server Management Studio (SSMS) 的"连接到服务器"对话框会记录用户所有访问过的服务器名称,这个功能对于经常连接多个数据库的人来说确实挺方便的 ...
- 简单说一个IOCP不好的地方
感谢rulary的指正!博文中我对IOCP的理解是有误的,正确的方式请见评论区rulary的回复! 由于项目实际设计的需要,最终IO事件处理没有采用IOCP,而是采用了NT6.0引入的WSAPoll, ...
- IOCP入门
完成端口(Completion Port)详解 此文讲解最好,也很全面一下其他文章看看就行,也可不看. 单句柄数据,单IO数据 此文讲述比较清晰,可以辅助理解上文. IOCP编程之基本原理:http: ...
- 「ubuntu」通过无线网络安装Ubuntu Server,启动系统后如何连接无线网络
接触Ubuntu系统不久,发现无线网络环境下安装Ubuntu Server一个不太人性化的设计:在安装过程中选择无线网卡,即使用无线网络安装(此时需要选择Wi-Fi网络并输入密码),但系统安装完成重启 ...
随机推荐
- Debug of bash , perl and python
1.bash -x script 2.perl -d script 3. python -m pdb script n: execute the next line s: execute the ...
- Python 列表生成式、生成器、迭代器
列表生成式 列表生成式即List Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式. 如果要生成[1x1, 2x2, 3x3, ..., 10x10]怎么 ...
- Unity 图片分割将spirte保存在本地
如果你拿到的是一张整图,你想分割之后使用NGUI sprite来使用! 下面就能解决的需求. 步骤: 1. 使用Unity自带的spirte进行分割图片 2. 使用代码把分割出来的2DSpirte转 ...
- 总结 XSS 与 CSRF 两种跨站攻击
前言 在那个年代,大家一般用拼接字符串的方式来构造动态 SQL 语句创建应用,于是 SQL 注入成了很流行的攻击方式.在这个年代, 参数化查询 [1] 已经成了普遍用法,我们已经离 SQL 注入很远了 ...
- Oracle DBlink的创建-查看与删除
DBlink常用于在两个Oracle数据库之间相互连接,如手工同步数据时,DBLink是最方便快捷的手段之一. 1.创建DBLink语法:create public database link < ...
- VLC播放器架构剖析
VLC采用多线程并行解码架构,线程之间通过单独的一个线程控制所有线程的状态,解码器采用filter模式.组织方式为模块架构 模块简述:libvlc 是VLC的核心部分 ...
- 自学HTML的几个例子
此处不赘述HTML中不同标签的用法仅仅给出自己学习时写的一些自娱自乐的例子,具体标签用法请参考W3C(http://www.w3school.com.cn/),毕竟这个才是最靠谱的,请不要相信任何二道 ...
- 高效批量更新 sql 字段的值(从一个表向另一个表更新)
里给出一种更高效.简洁的做法,批量更新SQL ,一句SQL就可以替代麻烦的循环过程,有MS SQLServer.Oracle.DB2下的写法--关键点:t4和t1是同一个table,primary k ...
- C#同步数据库的数据到Neo4J
数据组件采用https://github.com/Readify/Neo4jClient 在nuget里面有 需要注意的是 以下是示例代码: using System;using System.Col ...
- es3中使用es6/7的字符串扩展
最近在看阮一峰的<ES6标准入门>,在字符串扩展一节中有提到几个新的扩展,觉得挺有意思,想在ES3里面使用,于是就有下面的兼容性写法. repeat 将一个字符串重复n次 String.p ...