总共写了12期,比较乱,包含了Socket编程的服务器和客户端的方方面面,也根据反馈修改了一些内容,大家凑合看:
C#高性能大容量SOCKET并发(零):代码结构说明
C#高性能大容量SOCKET并发(一):IOCP完成端口例子介绍
C#高性能大容量SOCKET并发(二):SocketAsyncEventArgs封装
C#高性能大容量SOCKET并发(三):接收、发送
C#高性能大容量SOCKET并发(四):缓存设计
C#高性能大容量SOCKET并发(五):粘包、分包、解包
C#高性能大容量SOCKET并发(六):超时Socket断开(守护线程)和心跳包
C#高性能大容量SOCKET并发(七):协议字符集
C#高性能大容量SOCKET并发(八):通讯协议
C#高性能大容量SOCKET并发(九):断点续传
C#高性能大容量SOCKET并发(十):SocketAsyncEventArgs线程模型
C#高性能大容量SOCKET并发(十一):编写上传客户端
介绍了NET的Socket编程服务器和客户端实现,可以作为实现服务器远程RPC方案,例子代码仅供参考和学习使用,用于商业用途引起的问题不承担责任,欢迎大家交流,邮箱:fansheng_hx@163.com
C#高性能大容量SOCKET并发(零):代码结构说明
C#高性能大容量SOCKET并发(一):IOCP完成端口例子介绍
C#高性能大容量SOCKET并发(二):SocketAsyncEventArgs封装
C#高性能大容量SOCKET并发(三):接收、发送
C#高性能大容量SOCKET并发(四):缓存设计
C#高性能大容量SOCKET并发(五):粘包、分包、解包
C#高性能大容量SOCKET并发(六):超时Socket断开(守护线程)和心跳包
C#高性能大容量SOCKET并发(七):协议字符集
C#高性能大容量SOCKET并发(八):通讯协议
C#高性能大容量SOCKET并发(九):断点续传
C#高性能大容量SOCKET并发(十):SocketAsyncEventArgs线程模型
C#高性能大容量SOCKET并发(十一):编写上传客户端
介绍了NET的Socket编程服务器和客户端实现,可以作为实现服务器远程RPC方案,例子代码仅供参考和学习使用,用于商业用途引起的问题不承担责任,欢迎大家交流,邮箱:fansheng_hx@163.com
解决方案
20
谢谢分享,lz谦虚了。
5
现在我们的客户当中还有60%使用xp系统。这个是真想用啊。
5
小的们,赶紧来膜拜高手呀!
5
本人有一个小疑问,题主在ProcessCommand的时候是放在IOCP的工作线程中的,当ProcessCommand的任务量比较大或存在阻塞或第三方IO调用等待,会不会导致IOCP工作线程不够用,最终导致网络堆栈的缓冲区爆棚?
举个比较极端的例子,有若干客户端向服务端上传日志,服务端需要对此日志进行实时计算,但由于客户端的并发量非常大,导致上传日志的速度非常快,而对日志进行计算是需要花费时间的,服务端来不及消费客户端上传的日志,在这种情况下会不会直接导致IOCP的工作线程来不及处理完成接收事件?
在这种情况下,最糟糕的情况能否会导致网络堆栈爆棚,从而使得TCP协议控制客户端数据发送速率,最终使得整个系统吞吐量严重下降?
举个比较极端的例子,有若干客户端向服务端上传日志,服务端需要对此日志进行实时计算,但由于客户端的并发量非常大,导致上传日志的速度非常快,而对日志进行计算是需要花费时间的,服务端来不及消费客户端上传的日志,在这种情况下会不会直接导致IOCP的工作线程来不及处理完成接收事件?
在这种情况下,最糟糕的情况能否会导致网络堆栈爆棚,从而使得TCP协议控制客户端数据发送速率,最终使得整个系统吞吐量严重下降?
5
原来一直忽视了 SocketAsyncEventArgs 对象,感谢题主分享.
但有个问题,使用了这个异步读写和线程池等就是完成端口了吗?莫非不需要用到CreateIoCompletionPort这个API吗?
但有个问题,使用了这个异步读写和线程池等就是完成端口了吗?莫非不需要用到CreateIoCompletionPort这个API吗?