智能硬件设备,需要实时长链接向服务器发送数据,这个设备只要插上电就会向服务器上传数据。目前的设计方案是服务器接收一个请求,开一个线程。但是刚才用jMeter测试,发现有100个并发线程CPU就跑140%+了。
就想到了用线程池,但是如果用线程池,如果池子里只有100个线程,我有200个设备接入。是不是就意味着有100个设备连不上。
谢谢大家。
学习是最好的投资!
我看到你只寫到設備要向伺服器發送數據,沒有寫到伺服器會推送數據到設備,如果只是這樣,那麼用HTTP協定也並非不可以。如果有雙向的需求,但是資料上傳是有一定間隔的,並不是即時都在傳送,那可以考慮使用非阻塞IO來實現,這樣把IO響應做到系統底層去,而Java層只要再有資料傳送的時候建立執行緒來處理即可,可以減少執行緒開銷。如果真的是200個裝置連線就會是200個裝置同時上傳並一直不斷的傳遞數據,那隻能升級配置,其他方法反倒費力不討好。
可以考慮golang的協程概念
我看到你只寫到設備要向伺服器發送數據,沒有寫到伺服器會推送數據到設備,如果只是這樣,那麼用HTTP協定也並非不可以。如果有雙向的需求,但是資料上傳是有一定間隔的,並不是即時都在傳送,那可以考慮使用非阻塞IO來實現,這樣把IO響應做到系統底層去,而Java層只要再有資料傳送的時候建立執行緒來處理即可,可以減少執行緒開銷。如果真的是200個裝置連線就會是200個裝置同時上傳並一直不斷的傳遞數據,那隻能升級配置,其他方法反倒費力不討好。
可以考慮golang的協程概念