1
kiracyan 2019-11-22 10:53:58 +08:00 1
C10K ?
|
3
fancy111 2019-11-22 11:16:51 +08:00
swoole 和 nodejs 就很好的解决了这个问题,当然是用多进程或协程处理多个连接,毕竟用户不是每时每刻都发送数据。
|
4
xiaotianhu 2019-11-22 11:25:47 +08:00
每个开发语言都有对应的框架解决问题啊。
一般都是基于 libevent 事件+异步 就搞定了。 |
5
bobuick 2019-11-22 12:41:36 +08:00
这要求不高. 现在随便拉出来各类语言实现的一些网络库都能达到了. 你也可以自己用 c,或者 cpp 撸一个简单的, 不复杂. 这方面很多开源的最基础的实现, 拿过来自己看看.
下层用 epoll, 我估计单个线程 accept, 然后放线程池里挂载 epoll 进行 epol_ctl 都能达到你要的性能. 已经封装号的多如牛毛, go 的随便 C100k, java 的 netty 也随便能到. 前提是你只是个网络层, 如果把其他逻辑加就另外一回事了 |
6
0ZXYDDu796nVCFxq 2019-11-22 12:52:39 +08:00 via Android
C10K 十年前就解决了
你只需要了解下调用哪些系统接口或者使用哪个库 |
7
sagaxu 2019-11-22 13:09:29 +08:00 via Android
10 年前,处理 C10K 还要点编程技巧。现在嘛,傻乎乎的开 10K 个 Java 线程也就多用个 2.5G 内存。协程或者 async/await 方案已经烂大街,C10K 也早换成 C10M 了。
|
8
ipwx 2019-11-22 13:14:45 +08:00 via Android
asio, epoll, kqueue。或者基于这些的库。基本思想是非阻塞,在一个线程里面和尽可能多的客户端通讯。计算交给线程池。
|
9
opengps 2019-11-22 13:17:49 +08:00 via Android
现在做 socket 开发的资料比以前多多了,这些公开资料已经解决了楼主考虑的问题。
关于链接的保活,依赖的是客户端心跳包协议和服务端 keepalive |