1
undefinedsymbol 2019-08-13 12:04:28 +08:00
windows 平台 iocp,linux 平台 epoll,数据可以先做 redis 缓存,然后再落地进 sql
|
2
securityCoding 2019-08-13 12:14:26 +08:00
io 多路复用肯定是要的. 数据处理可以扔队列异步处理落库
我理解的是这场景似乎没有什么难点?不知道楼主的困惑在哪里 |
3
opengps 2019-08-13 12:20:03 +08:00 via Android 1
想法没啥大问题,注意扩展成分布式的,不要硬用单机单端口承载
|
4
Tracy1997 OP @securityCoding 谢谢!但是我这种都是连上不会断开且一直发数据的活跃连接似乎用 select 更好一些?
@undefinedsymbol 谢谢!主要想知道自己这种方式够不够好,有没有更好的。 @opengps 谢谢,会再去看看。 |
5
AlvaIM 2019-08-13 14:03:49 +08:00
小几千台的话机器性能好 select 也能 hold 住, 但是现在 IO 复用的方案很成熟了, 你可以直接上 libevent,libuv ( C, C++)或者 Netty ( Java ) Tornado,Gevent ( Python ),NodeJS,Golang .............
数据现在本地内存处理, 只需要把处理结果用队列发送给数据库做持久化就行了 |
6
Mirana 2019-08-13 14:16:53 +08:00
裸用 epoll 肯定是可以的 但是为啥不用 libuv libev 这种已经封装好的库呢
|
7
Twain 2019-08-13 15:21:26 +08:00
golang 或者 c 语言版本的 state threads
|
8
useben 2019-08-13 16:49:59 +08:00
这并发不高,随便开个 epoll+异步队列+线程池就 ok 了,或者直接上 go 简单多了
|
9
reus 2019-08-13 16:56:35 +08:00
几千个而已,一个连接一个线程不成问题,用 go 也可以。
如果数据库不够快,可以先写入日志文件,顺序写很快的,然后再异步处理入库。 如果是时序数据,直接找个时序数据库入就行,一般都够快的,不用日志。 |
10
neocanable 2019-08-13 17:00:52 +08:00
几千台的话,select 都能搞定啊,我觉得最简单了,只要 server 端处理的快,应该不成问题,高大上的不如先搞出来,再升级
|
11
lan894734188 2019-08-13 17:04:22 +08:00
考虑后续扩展性的话就 MQ+中间处理件+redis 缓存+最后数据库
|
12
lan894734188 2019-08-13 17:06:39 +08:00
1 秒 1 包不是心跳包么… 判断 UpDown 不建议另外程序读写数据库去操作。中间件处理这个性能压力没那么大
|
13
wlgq2 2019-08-13 18:02:40 +08:00
https://github.com/wlgq2/uv-cpp
可以满足你的需求 |
14
liuminghao233 2019-08-13 18:31:33 +08:00 via iPhone
直接上 go 应该可以粗暴解决问题
|
15
conn4575 2019-08-14 08:23:58 +08:00 via Android
libuv 或者 tornado,考虑后期后期拓展建议前面加 nginx 代理一下 socket,至少部署两台保证高可用,异步队列处理都是锦上添花看你需求
|
16
yinqi025 2019-08-14 09:14:15 +08:00
为什么不试试做个缓存???
|