V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  coder001  ›  全部回复第 3 页 / 共 7 页
回复总数  122
1  2  3  4  5  6  7  
351 天前
回复了 exqibao 创建的主题 C# 使用 C#的 HPSocket 的一个问题
在 C#玩 TCP 当然是 Kestrel ,微软自家出品的 Socket 封装,客户端和服务端都能用,用上它之后再也不用自己操心缓冲区了,PDU 边界(低情商俗称:粘包分包)什么的更是雕虫小技

https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.server.kestrel.transport.sockets.socketconnectioncontextfactory.create?view=aspnetcore-8.0
2023-10-24 17:21:43 +08:00
回复了 Worldispow 创建的主题 全球工单系统 淘宝、京东、美团的强制推送是咋实现的
购物类 APP 用完就将其杀死,从未遇到过顽固推送,估计是杀死 APP 的同时通知栏内容也跟着消失吧

绿色守护免费版就够用了
2023-09-02 16:47:32 +08:00
回复了 Windyzhou 创建的主题 Android 小米手机能不能设置充满电提示音, magisk 插件也行
XPERIA 电池保养可以设置充电电量限制在 80%或 90%, 妈妈再也不用担心我充过头了
@0o0O0o0O0o #6
米如果是几斤真空小包装,按件计
卷纸按卷计
似乎没有毛病?
2023-07-29 17:38:07 +08:00
回复了 unt 创建的主题 程序员 Java Go Node 哪种语言最适合做物联网平台开发
@liuhan907 回来报喜
正经项目换 kestrel 重构之后,目前压测连接承载能力摸到 3 万了,需要花一点时间来 accept ,问题不大~
2023-06-28 20:41:07 +08:00
回复了 unt 创建的主题 程序员 Java Go Node 哪种语言最适合做物联网平台开发
@liuhan907
压测了一下 Kestrel 的 TCP 服务端,花了几秒钟来 accept 两万 TCP ,虽然有部分重连,但还是全都连上了

看来以后可以用它,妈妈再也不用担心我维护不好 Socket 和 SAE 了,乐。
2023-06-21 10:55:34 +08:00
回复了 unt 创建的主题 程序员 Java Go Node 哪种语言最适合做物联网平台开发
@liuhan907

另外,我看 Kestrel 源代码时注意到监听是单线程异步,这可能会 accept 不过来,经验告诉我如果几万 TCP 同时打进去,能进去的可能会只有几千个

https://github.com/dotnet/aspnetcore/blob/main/src/Servers/Kestrel/Transport.Sockets/src/SocketConnectionListener.cs#LL67C64-L67C64
2023-06-21 00:01:36 +08:00
回复了 unt 创建的主题 程序员 Java Go Node 哪种语言最适合做物联网平台开发
@liuhan907 能用 ws 是我的梦想,一直在做梦,苦于设备目前只支持 TCP 接入
如果走 ws 就不需要专门开一种 TCP 服务端了,做好高可用使劲加 Web 服务器就成)
2023-06-20 23:32:20 +08:00
回复了 unt 创建的主题 程序员 Java Go Node 哪种语言最适合做物联网平台开发
@liuhan907 #58
源代码看起来有点枯燥,倒是发现原来 core 内置的 K 服务还能处理自定义 TCP 这就有意思了,正好有个新的小规模项目可以走这条路整整😋

https://github.com/davidfowl/MultiProtocolAspNetCore/tree/master/KestrelTcpDemo
2023-06-16 16:59:52 +08:00
回复了 unt 创建的主题 程序员 Java Go Node 哪种语言最适合做物联网平台开发
@liuhan907
那就简单来说说 (^ o ^)ノ

测试环境是 linux k8s 集群,所在节点 4 核 16G (后来加到了 8 核),非独占,还有一些其他东西跑,但不占太多 CPU

最开始的版本是图省事,嫌复杂懒得用 SocketAsyncEventArgs ( SAE ),监听开单线程阻塞,接收就用 Socket.Select 方法批量轮询,把筛出来的 Socket 滥用 Task.Run 处理接收和协议解析,可以想象线程池会有多窘迫,再多的 MinThread 也处理不过来,只会徒增 CPU 使用率。

单线程阻塞监听真是太天真了,大量 TCP 同时发起的时候根本 accept 不过来,后来改用 SAE 监听,一上来就安排 1024 个躺在端口前迎接,回调不直接处理,而是放进自己创建的工作线程排队创建应用层会话,加入会话管理器。这下几乎没有连不进去的了。

后来多几次改进调优就变成完全 SAE 了,监听和接收还有发送全都走 SAE ,只是 SAE 的回调依旧信不过,不在这里做过多的处理,而是自己开线程排队,也能观测一下队列数量来评估性能。

总算是稍微拯救了一下这难看的数据。

要问为什么自己撸 Socket 而不用现成框架,我不想回忆被 SuperSocket 折磨的那些年 _(:з)∠)_
辩解:协议单一,而且相对简单,可以自己来❌
2023-06-16 15:21:53 +08:00
回复了 unt 创建的主题 程序员 Java Go Node 哪种语言最适合做物联网平台开发
@liuhan907
目前性能数据已经可以接受,就不放出来丢人现眼了 _(:з)∠)_
2023-06-16 11:29:13 +08:00
回复了 unt 创建的主题 程序员 Java Go Node 哪种语言最适合做物联网平台开发
@INCerry #50
@liuhan907 #51
先谢过两位

目前用若干个绑定了队列的线程,每次有回调就挑队列长度最短的分配工作项,压测看起来数据没这么难看了
压测用 5 万个 TCP 同时打进去,PPS 没测量,几乎所有 PDU 都小于 1400 ,姑且按 PDU 计算的话,极端状况下往返加起来可能会达到( x4 ) 20 万 PDU 每秒。
协议超时时间是 30 秒,但超过 10 秒就会被称为数据不好看
2023-06-15 15:04:58 +08:00
回复了 unt 创建的主题 程序员 Java Go Node 哪种语言最适合做物联网平台开发
@INCerry #45
当然尝试设置最小线程数量,但收效甚微,而且 CPU 使用率显著上升
2023-06-15 11:44:58 +08:00
回复了 unt 创建的主题 程序员 Java Go Node 哪种语言最适合做物联网平台开发
@liuhan907 #28

吾辈在 TCP 异步 Socket 高并发的情况下滥用了异步回调处理收到的数据,响应时间拉长到无法接受,排查发现是调度延迟。
后来在 SocketAsyncEventArgs 回调把要处理的东西封装成工作项,放进自己维护的线程,用线程安全队列排队处理,这才扛得起来。

这算 CPU 密集吗🤔 (不过这倒是和主题的物联网沾上边了
2023-06-14 18:29:38 +08:00
回复了 unt 创建的主题 程序员 Java Go Node 哪种语言最适合做物联网平台开发
@INCerry #11 WOW ,看来我井还没有没落,没太仔细读回帖就先莽了
建议不要太过于 “迷信”(🤔?) Task/async/await 的调度机制,到头来可能还不如自己撸线程来的快 :p
2023-06-14 18:25:49 +08:00
回复了 unt 创建的主题 程序员 Java Go Node 哪种语言最适合做物联网平台开发
看来用 dot net core 的只有我一个?
2023-05-22 20:35:04 +08:00
回复了 1311317 创建的主题 问与答 用 frp 搭建了 rdp 远程服务,怎么避免别人尝试登录
套一层 OpenVPN
2023-02-02 13:42:46 +08:00
回复了 x500 创建的主题 程序员 请教:有什么办法能比较 2 个电脑上的文件夹?
smb+freefilesync
2022-12-30 13:53:54 +08:00
回复了 dicc 创建的主题 问与答 求推荐一个这样的画图插件,web
也可以试试 draw.io
1  2  3  4  5  6  7  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2996 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 22ms · UTC 13:20 · PVG 21:20 · LAX 05:20 · JFK 08:20
Developed with CodeLauncher
♥ Do have faith in what you're doing.