跳到主要内容

创建一个高可用Tcp服务器

· 阅读需 17 分钟
若汝棋茗
Software Engineer Ⅱ

一、引言

在当今万物互联的时代,物联网(IoT)设备的数量正以一种让程序员们头皮发麻的速度增长。这些设备每天通过网络传输的数据量,大概可以把一个普通开发者的大脑硬盘塞到格式化重装的程度。

而在这个"一切皆联网"的洪流中,TCP 服务器扮演着承上启下的核心角色——它既要接受来自四面八方、操着各种稀奇古怪协议方言的设备连接,又要把这些数据可靠地处理并转发出去。说白了,它就是那个全能保姆,还不能休假。

作为 TouchSocket 网络通信框架的作者,我经常在各种群里看到这样的场景:

某开发者:为什么我的 TCP 服务器运行一段时间就崩了?

我:你的服务器是怎么创建的?

某开发者:new TcpService() 啊,哪里有问题?

这就好比你找了一个世界顶级主厨,然后让他站在路边摆摊煎饼果子——不是不行,但总感觉哪里不对劲。

TCP 服务器不是一个随手创建、用完即弃的玩具。它需要精心设计的架构、合理的配置管理、优雅的插件化扩展,以及——最重要的——要能活得久

所以,我决定写这篇博客,手把手带你构建一个真正高可用的 TCP 服务器。用通俗的话说——就是那种即使凌晨 3 点宕机了,你的手机也不会被运维的电话打爆的服务器。

二、技术细节

2.1 技术框架

本文使用微软提供的通用主机(Generic Host) 进行构建,这套体系就像是给你的应用装了一套 PM(进程管理)+ 配置中心 + IOC 容器的豪华套餐,支持:

  • 跨平台(Windows、Linux、macOS,就差运行在烤面包机上了)
  • Windows 服务(让服务器在后台默默干活,不打扰你工作摸鱼)
  • IIS 托管
  • Options 选项配置(告别硬编码端口,yyds)
  • 插件化加载(像乐高一样搭积木)
  • IOC 容器(依赖注入,让代码松耦合不粘手)
  • Native AOT(让你的 exe 小到让同事以为你在传病毒)

2.2 框架版本

支持:

  • .NET Framework 4.6.2 及以上(是的,古老的 462 也没被抛弃)
  • .NET 6 及以上

2.3 实现功能

本示例将实现以下功能(画的饼,本文全部会兑现):

  • 接收、发送数据
  • 消息单次响应
  • 消息广播(群发,比你微信群艾特所有人还快)
  • 数据库持久化(把数据存起来,不然断电就白干了)

Tcp实现限流服务——优雅地拒绝"贪婪"的客户端

· 阅读需 9 分钟
若汝棋茗
Software Engineer Ⅱ

一、引言:当"好客"变成"受难"

在一个阳光明媚的下午,我正悠哉悠哉地更新博客。忽然,一条来自群友的私信打破了宁静——这位朋友是一名对网络编程充满热情的大学生,最近正在研究 TCP 连接数量限流和接收流量限流。他噼里啪啦连续发来一堆问题,我的屏幕差点没装下……

其实,限流这个话题,本质上就是 "服务器学会说不" 的艺术。

你想想:一个热门餐厅,如果不限号,来多少人接多少,厨师当场崩溃,菜没法做,最终所有人都饿肚子。但如果合理地限制每桌用餐人数、控制上菜速度,反而能让大家都享受美食体验。TCP 限流的道理如出一辙。

以前写过一篇博客聊过相关话题,但那会儿写得太简单,点到即止。这次要升级一下方案,把原理和代码都聊清楚,让你彻底搞明白——如何用最优雅的方式,礼貌而坚定地"限制"你的客户端。