Java Go Node 哪种语言最适合做物联网平台开发

2023-06-14 14:22:47 +08:00
 unt
设备量:10W 台同时在线,同时收发
对接方式:mqtt,tcp ,websocket (设备种类较多,每种设备不同的对接协议)
公司背景:中型企业,toB,本公司说了算,出现 bug 也没事
6567 次点击
所在节点    程序员
68 条回复
liuhan907
2023-06-20 23:38:32 +08:00
@coder001
aspnetcore 的代码可真是不容易看懂,稍有些绕。这个自定义处理 Tcp 我还是在 SignalR 的源码里翻出来的 (
不过后来我就直接用 ws 了
coder001
2023-06-21 00:01:36 +08:00
@liuhan907 能用 ws 是我的梦想,一直在做梦,苦于设备目前只支持 TCP 接入
如果走 ws 就不需要专门开一种 TCP 服务端了,做好高可用使劲加 Web 服务器就成)
coder001
2023-06-21 10:55:34 +08:00
@liuhan907

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

https://github.com/dotnet/aspnetcore/blob/main/src/Servers/Kestrel/Transport.Sockets/src/SocketConnectionListener.cs#LL67C64-L67C64
liuhan907
2023-06-22 01:50:01 +08:00
@coder001
以我对 IOCP 的认知,Windows 上应该不会发生这个问题。因为 Accept 慢主要是慢在创建 Socket 上,而 IOCP 创建是系统内核在处理这个问题,不会拖慢应用。
至于 Linux 上,鉴于我对 epoll 的熟悉程度不如 IOCP ,所以我不是很确定。但是曾经读过 devblog 的文章,里面表示 Linux 上的实现是 epoll + 线程池,所以我觉得可能也没有你担心的问题,可能。
coder001
2023-06-28 20:41:07 +08:00
@liuhan907
压测了一下 Kestrel 的 TCP 服务端,花了几秒钟来 accept 两万 TCP ,虽然有部分重连,但还是全都连上了

看来以后可以用它,妈妈再也不用担心我维护不好 Socket 和 SAE 了,乐。
BifroMQ
2023-06-29 11:24:20 +08:00
熟悉哪个选哪个。
不用担心,99.99%情况下, 语言不会成为瓶颈;
0.01%情况下业务增长到那个程度早重构了。
liuhan907
2023-06-29 13:02:29 +08:00
@coder001
说不定你再改改配置和 GC 选项,连重连都没了(
coder001
2023-07-29 17:38:07 +08:00
@liuhan907 回来报喜
正经项目换 kestrel 重构之后,目前压测连接承载能力摸到 3 万了,需要花一点时间来 accept ,问题不大~

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://yangjunhui.monster/t/948663

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX