springwebsocket java.io.IOException: Broken pipe

環境:springwebsocket,tomcat7,8html

最近再作直播的項目,你們知道直播都有彈幕。java

在技術選型的時候沒多考慮,就選了springwebsocket,網上demo不少。node

基本功能就是聊天。開發,測試都沒啥問題,可有兩次活動人數比較多,直播過程當中有幾個併發量很大的遊戲功能,致使Broken pipe ,服務崩潰,搞的現場很尷尬。linux

回來開始重現,業務場景:用戶進入直播間給房間每一個人發送通知(XX來了),用戶退出直播間給房間每一個人發送通知(XX離開)。web

最終發現是大量用戶進入直播間和大量用戶退出直播間時,有些用戶退出了還給他發發消息致使。spring

若是用戶退出不廣播消息也不會出現這個問題,可是這個功能必需要有,沒辦法,只好研究。apache

這個問題很是噁心(研究了4天),是在linux下出現,Windows是報java.io.IOException: Key must be cancelled,道理都是同樣的。網上案例不多,國外論壇都說是tomcat7,8的bug。tomcat

https://bz.apache.org/bugzilla/show_bug.cgi?id=57489websocket

http://tomcat.10.x6.nabble.com/Bug-57489-New-java-util-concurrent-ExecutionException-java-io-IOException-Key-must-be-cancelled-td5028703.html併發

以後開始搗鼓jboss,爲何要研究jboss呢?聽說jboss的併發支持很好,集羣也穩定,之前也用過,好久沒弄了。這東西也搞了一天,從7(好像不支持websocket)到8,而後到wildfly,最後啓動成功,發現ws協議請求不到,沒時間在耽誤了。最終換了tomcat9,而後測試,能夠暫時解決問題,服務不會掛掉,後續還要繼續測試。

期間空餘時間都在研究websocket方案,看來之後要換nodejs或netty。

8種websocket框架比較:

http://mp.weixin.qq.com/s?__biz=MzA5ODM5MDU3MA==&mid=2650861883&idx=1&sn=e87d99fc442314c6a55cc638c6abfda5&mpshare=1&scene=1&srcid=0223HHzJmV1Zam5jZn2pJ7z4#rd

相關文章
相關標籤/搜索