.net如何处理高并发socket,建立高性能健壮的socket服务

1.使用supersocket

  • 高性能的事件驱动通信;
  • 非常简单易用; 你只需要通过创建几个类就能获得一个健壮的 Socket 服务器;
  • 内置的命令行协议让你能够迅速创建一个网络命令行接口服务器;
  • 强大且高性能的协议解析实现工具帮你简化了网络数据的分析工作;
  • 灵活的配置功能和友好的配置 API;
  • 多监听器支持; 让你在一个服务器实例内监听多个端口;
  • 多服务器实例托管的支持让你从容面对复杂的部署需求;
  • 应用程序域和进程级别的隔离能够满足你大部分的宿主场景;
  • 内置的 SSL/TLS 加密支持;
  • 会话级别的发送队列能够让你通过会话并发的发送数据,并保持高性能和可控性;
  • SuperSocket 的命令处理模式让你的业务逻辑更清晰,更有条理;
  • 优良的可扩展 API 支持: Command Filter, Connection Filter, Command Loader;
  • 可替换的日志架构允许你使用你喜欢的日志组件;
  • 动态语言的支持; 允许你用 Python 之类的脚本语言来实现命令;
  • 与 Mono/Linux 保持二进制级别的兼容;
  • Windows Azure 的支持;
  • 内置你可以直接用于 Flash 或 Silverlight 客户端的 Socket 策略服务器;

官网地址:http://www.supersocket.net/

SuperSocket 层次示意图

SuperSocket Layers

SuperSocket 对象模型图示意图

SuperSocket Object Model

SuperSocket 请求处理模型示意图

SuperSocket Request Handling Model

SuperSocket 隔离模型示意图

SuperSocket Isolation Model

 

看到一个问题,说如何保持5000-10000+的健壮的socket服务。

初学者肯定是会把每个连接都开一个线程来监听。这很浪费资源

通常只会(动态地)占用几个线程就能保持3000个长连接会话了。
“为每个监听对象开一个新的线程”这是设计错误。你可以使用NetworkStream的异步Read,在没有消息的时候无需阻塞在什么线程里。

据不同的操作系统,多线程的约束条件也不同。当你发现工作线程超过1000个,或者IOCP(IO完成端口)线程超过800个,就应该赶紧断掉服务器进行维护了。
首先要有一个意识,使用几个、十几个线程就足以应付上千个普通业务连接了。
有人说“如果我要保持1000个客户端连接,就得开1001个线程来接收数据”,这纯粹是瞎扯。请一定要注意。

我说的“工作线程”是指你的进程中使用的工作线程总数,而不是只windows的。

在你的windows中,总线程数超过1500个是经常有的事情。你可以打开你的进程管理器看看cpu的指标,看看当前有多少线程在切换使用。很可能超过1500个。但是可以监视每一个单个的进程,看看它的线程数,通常只有10个左右(只有System线程数会有100多)。

而你的服务器进程,工作线程数不应该太高。平常只有十几个线程足以应对几千客户端了。

如果你用.net 开发,你可以使用  supersocket 这个是我目前开发比较全面的, 或者用一个较 fastsocket的,也不错(相关更轻一点).

posted @ 2016-03-01 11:19  airtcp  阅读(10779)  评论(0编辑  收藏  举报