首页 / C# / c# – 非阻塞Tcp服务器
c# – 非阻塞Tcp服务器
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – 非阻塞Tcp服务器,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1950字,纯文字阅读大概需要3分钟。
内容图文
![c# – 非阻塞Tcp服务器](/upload/InfoBanner/zyjiaocheng/798/ce45a24492374f63be9cbdcc5a32e799.jpg)
这不是一个问题,我只是在寻找一些指导:)
我正在编写一些抽象的tcp服务器,它应尽可能少地使用线程.
目前它以这种方式工作.我有一个线程在做侦听和一些工作线程.监听器线程只是坐着等待客户端连接我希望每个服务器实例都有一个监听器线程.工作线程正在客户端套接字上执行所有读/写/处理作业.
所以我的问题是建立有效的工人流程.我遇到了一些我无法解决的问题.工作者代码是这样的(代码非常简单,只是为了显示我有问题的地方):
List<Socket> readSockets = new List<Socket>();
List<Socket> writeSockets = new List<Socket>();
List<Socket> errorSockets = new List<Socket>();
while( true ){
Socket.Select( readSockets, writeSockets, errorSockets, 10 );
foreach( readSocket in readSockets ){
// do reading here
}
foreach( writeSocket in writeSockets ){
// do writing here
}
// POINT2 and here's the problem i will describe below
}
因为while循环再次循环,所以它可以全部接受100%的CPU使用率,如果我让我的客户端正在执行send-> receive->断开例程,那不是那么痛苦,但是如果我试着保持活着那么发送 – >接收 – >发送 – >重新接收它真的吃掉所有CPU.所以我的第一个想法是在那里睡觉,我检查是否所有套接字都发送了他们的数据,然后将Thread.Sleep放入POINT2只持续了10ms,但是这10ms之后产生了10ms的巨大延迟,当我想接下来的时候从客户端套接字的命令..例如,如果我不尝试“保持活动”命令正在10-15毫秒内执行,并保持活着它变得更糟至少10毫秒:(
也许这只是一个糟糕的建筑?可以做什么,以便我的处理器不会获得100%的利用率,我的服务器会尽快对客户端套接字中出现的内容做出反应?也许有人可以指出它应该维护的非阻塞服务器和架构的一个好例子?
解决方法:
先看看TcpListener课程.它有一个不会阻塞的BeginAccept方法,并会在有人连接时调用你的一个函数.
另请参阅Socket类及其Begin方法.这些工作方式相同.只要某个事件触发,就会调用其中一个函数(回调函数),然后就可以处理该事件.所有Begin方法都是异步的,因此它们不会阻塞,也不应该使用100%的CPU.基本上你想要BeginReceive阅读和BeginSend写作我相信.
您可以通过搜索这些方法和异步套接字教程在Google上找到更多信息. Here’s how以这种方式实现TCP客户端.即使对于您的服务器,它的工作方式基本相同.
这样你就不需要任何无限循环,它都是事件驱动的.
内容总结
以上是互联网集市为您收集整理的c# – 非阻塞Tcp服务器全部内容,希望文章能够帮你解决c# – 非阻塞Tcp服务器所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。