c# TCP高性能通信

开篇都是吹牛逼哈。。。

我原本打算使用dotnetty来解决传输问题,但是试了下没有成功,也没有找到相关问题解决方法,导出源码,好大啊。暂时不想研究,而且是.Net Core的。最后没有办法,就自己封装了。我就不上代码了,已经传到GIT上面了,和其它项目。

我主要介绍过程原理,;

1.ISocketChannel接口,继承实现通信,继承类封装Socket.

2.外层封装ServerSocketChannel,仿造dotnetty服务端,设置socket参数,接收线程数,设置数据的解析类及打包的类以及数据接收类。

具体ServerSocketChannel:

里面定义了一个ServerSocketTask,启动接收连接,采用SocketAsyncEventArgs 接收连接,用一个缓冲池保持对象,每接收一个就再次接收一个;

接收连接后,放入到一个集合中,然后由启动的多个接收线程抽取数据,监测是否有数据读取,有就读取,没有就休眠一下,接收采用缓冲buffer,主要是解决多包数据问题,接收完整一包后还是要合并一个byte[],然后再次传入给设置的接收类中。

3.SocketChannel是解决客户端,客户端直接采用SocketAsyncEventArgs接收,不用再使用其它方法,毕竟客户端再同一台机器不可能成百上千,直接由底层线程池接收就可以了。c#的线程池有自己的算法,会动态维护。不用再麻烦处理了。当然我实现了手动控制线程,启动多个线程去接收数据。

项目地址:https://github.com/jinyuttt/StremCloud.git

其中解决方案下的NetHighSocket项目就是通信实现,但是还需要项目SrvNetSocket,通信接口库,为啥会有这个库,我后面博文会简单说的。

 

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值