84669 Lernen von Personen
152542 Lernen von Personen
20005 Lernen von Personen
5487 Lernen von Personen
7821 Lernen von Personen
359900 Lernen von Personen
3350 Lernen von Personen
180660 Lernen von Personen
48569 Lernen von Personen
18603 Lernen von Personen
40936 Lernen von Personen
1549 Lernen von Personen
1183 Lernen von Personen
32909 Lernen von Personen
智能硬件设备,需要实时长链接向服务器发送数据,这个设备只要插上电就会向服务器上传数据。目前的设计方案是服务器接收一个请求,开一个线程。但是刚才用jMeter测试,发现有100个并发线程CPU就跑140%+了。
就想到了用线程池,但是如果用线程池,如果池子里只有100个线程,我有200个设备接入。是不是就意味着有100个设备连不上。
谢谢大家。
学习是最好的投资!
我看到你只写到设备要向服务器发送数据,没有写到服务器会推送数据到设备,如果只是这样,那用HTTP协议也并非不可以。如果有双向的需求,但是数据上传是有一定间隔的,并不是实时都在传送,那可以考虑使用非阻塞IO来实现,这样把IO响应做到系统底层去,而Java层只要再有数据传送的时候建立线程来处理即可,可以减少线程开销。如果真的是200个设备连接就会是200个设备同时上传并一直不断的传递数据,那只能升级配置,其他方法反倒费力不讨好。
可以考虑golang的协程概念
我看到你只写到设备要向服务器发送数据,没有写到服务器会推送数据到设备,如果只是这样,那用HTTP协议也并非不可以。如果有双向的需求,但是数据上传是有一定间隔的,并不是实时都在传送,那可以考虑使用非阻塞IO来实现,这样把IO响应做到系统底层去,而Java层只要再有数据传送的时候建立线程来处理即可,可以减少线程开销。如果真的是200个设备连接就会是200个设备同时上传并一直不断的传递数据,那只能升级配置,其他方法反倒费力不讨好。
可以考虑golang的协程概念