java WebSocke的那些錯(cuò)誤

? ? ? ? 最近,由于生活壓力過大就找個(gè)公司進(jìn)行工作,沒想到的是這個(gè)公司是個(gè)外包公司各式各樣的項(xiàng)目都能接到。

? ? ? ? 有句話說的好夫啊,那就是外包公司最漲技術(shù),因?yàn)樵诠纠锸裁礃拥捻?xiàng)目都可能遇得到辆憔,及時(shí)以前沒做過的在這也能遇到撇眯,無論是web還是游戲通吃。

? ? ? ? 這段時(shí)間經(jīng)手好幾個(gè)項(xiàng)目了虱咧,多數(shù)是游戲熊榛,對(duì)于游戲來說那就是實(shí)時(shí)連接的,最好的選擇就是就是socket或者websocket腕巡,今天就來說一下我遇到的這些小問題吧来候!


? ? ? ? ? 一、在SpringBoot+Redis+WebSocket的環(huán)境下編寫的程序有很多逸雹,那么一定有人會(huì)遇到這個(gè)問題就是不知道如何進(jìn)行下手

? ? ? ? ? ? ? ? ? 直接進(jìn)行創(chuàng)建一個(gè)類在類的上面寫上注解@Component還有@ServerEndpoint(value = "/game/{roomId}")

然后在類中寫上3個(gè)方法分別用來打開营搅、接受數(shù)據(jù)、關(guān)閉使用的回調(diào) 梆砸,看不不懂文字那就接下來看代碼圖片:圖一

圖一

這里注意的是 @OnOpen是有客戶端進(jìn)入會(huì)走的方法? ? ? ? ? ? ? ? ? ? ? ? ? ??

? ? ? ? ? ? ? ? ? ? ? ?@OnClose是有客戶端網(wǎng)絡(luò)中斷會(huì)走转质,主動(dòng)斷開也會(huì)走

? ? ? ? ? ? ? ? ? ? ? ? @OnMessage是客戶端發(fā)的數(shù)據(jù) str就是發(fā)送的內(nèi)容

綜上所述WebSocket只能進(jìn)行傳輸字符串也就是文本型,這就對(duì)了C\C++\C#不太友好帖世,這里有有個(gè)小技巧就是可以把數(shù)據(jù)封裝成類休蟹,使用工具轉(zhuǎn)成json,眾所周知json就是字符串日矫,不懂json是什么的親們也不要著急以后我會(huì)進(jìn)行解釋的

? ??????????????????????注意:這里的注解不能變方法名是可以隨意更改的? ?

? ??????????????????????這里還要注重的說一下@OnError這個(gè)注解public void onError(Session session,Throwable error){

? ??????????????????????這里還要注重的說一下@OnError這個(gè)注解public void onError(Session session,Throwable error){

? ??????????????????????這里還要注重的說一下@OnError這個(gè)注解public void onError(Session session,Throwable error){

? ? ? ? 這里為什么@OnError寫錯(cuò)了這個(gè)運(yùn)行的時(shí)候會(huì)報(bào)錯(cuò)赂弓,這個(gè)稍后下面會(huì)說到

? ? 二、寫了WebSocket但是無法進(jìn)行連接哪轿,這個(gè)如何出了呢盈魁?

? ? ? ? 這個(gè)就是在Spring中我們沒有把WebSocket注入進(jìn)去,那么我們就要把它裝進(jìn)去那就是使用配置類進(jìn)行加載窃诉,我們創(chuàng)建一個(gè)類進(jìn)行注入ServerEndpointExporter杨耙,在類上加注解@Configuration在類中寫一個(gè)@Bean進(jìn)行注入 ,文字看不懂我們看圖:圖二

圖二

? ?不要問為什么這樣寫就可以注入進(jìn)去飘痛,然后啟動(dòng)服務(wù)使用測(cè)試工具連接你就能發(fā)現(xiàn)神奇的是連上了

? ???????????????????注意:這里一定要注意這個(gè)類是將WebSocket注入到Spring中的那么發(fā)布到服務(wù)器的時(shí)候一定要把這個(gè)類屏蔽掉因?yàn)閟pring中內(nèi)置的tomcat和服務(wù)器上的服務(wù)器是有區(qū)別的這個(gè)一定要注意

? ??????????????????????發(fā)布到服務(wù)器的時(shí)候一定要把這個(gè)類屏蔽掉

? ??????????????????????發(fā)布到服務(wù)器的時(shí)候一定要把這個(gè)類屏蔽掉

? ??????????????????????發(fā)布到服務(wù)器的時(shí)候一定要把這個(gè)類屏蔽掉

? ? ? ? ? ? 三珊膜、寫的時(shí)候都是正常的但是編譯的時(shí)候抱了一大堆的錯(cuò)誤,百度也沒有什么結(jié)果怎么辦宣脉,別著急先來看看下表面有沒有你煩的錯(cuò)誤车柠,當(dāng)然下面的錯(cuò)誤也是我遇到的,看看我是怎么解決的吧!

? ? ? ? ? ? ? ? ? ? 報(bào)錯(cuò)一竹祷、

java.lang.IllegalStateException: Failed to register @ServerEndpoint class: class com.dreamwhale.pokermister.socket.GameSocket

at org.springframework.web.socket.server.standard.ServerEndpointExporter.registerEndpoint(ServerEndpointExporter.java:159)?

at org.springframework.web.socket.server.standard.ServerEndpointExporter.registerEndpoints(ServerEndpointExporter.java:134)?

at org.springframework.web.socket.server.standard.ServerEndpointExporter.afterSingletonsInstantiated(ServerEndpointExporter.java:112)?

at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:864)?

at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:877)?

at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:549)

at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:141)?

at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:744)?

at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:391)?

at org.springframework.boot.SpringApplication.run(SpringApplication.java:312)?

at org.springframework.boot.SpringApplication.run(SpringApplication.java:1215)?

at org.springframework.boot.SpringApplication.run(SpringApplication.java:1204)?

at com.dreamwhale.pokermister.PokerMisterApplication.main(PokerMisterApplication.java:10)

Caused by: javax.websocket.DeploymentException: No Throwable parameter was present on the method [onError] of class [com.dreamwhale.pokermister.socket.GameSocket] that was annotated with OnError

at org.apache.tomcat.websocket.pojo.PojoMethodMapping.getPathParams(PojoMethodMapping.java:325)?

at org.apache.tomcat.websocket.pojo.PojoMethodMapping.<init>(PojoMethodMapping.java:194)?

at org.apache.tomcat.websocket.server.WsServerContainer.addEndpoint(WsServerContainer.java:154)?

at org.apache.tomcat.websocket.server.WsServerContainer.addEndpoint(WsServerContainer.java:278)

at org.apache.tomcat.websocket.server.WsServerContainer.addEndpoint(WsServerContainer.java:228)?

at org.springframework.web.socket.server.standard.ServerEndpointExporter.registerEndpoint(ServerEndpointExporter.java:156)?

... 12 common frames omitted


????????????這里我們進(jìn)行分析一下介蛉,這個(gè)錯(cuò)誤錯(cuò)在哪里了呢?溶褪,當(dāng)然我在上面已經(jīng)標(biāo)注了币旧,就是這個(gè)錯(cuò)誤,仔細(xì)的看一下猿妈,我文章一開始寫的那個(gè)是不是多了一個(gè)@OnError導(dǎo)致的這個(gè)問題啊

? ? ? ? ? ? 哪有的朋友說了吹菱,我報(bào)的錯(cuò)誤跟這個(gè)相似但是不是這個(gè)錯(cuò)誤,再次我跟大家說像這樣的錯(cuò)誤只需要看我加粗加杠的字那個(gè)位置的錯(cuò)誤提示

例如下面這個(gè)錯(cuò)誤


java.lang.IllegalStateException: Failed to register @ServerEndpoint class: class com.dreamwhale.pokermister.socket.GameSocket

at org.springframework.web.socket.server.standard.ServerEndpointExporter.registerEndpoint(ServerEndpointExporter.java:159)?

at org.springframework.web.socket.server.standard.ServerEndpointExporter.registerEndpoints(ServerEndpointExporter.java:134)?

at org.springframework.web.socket.server.standard.ServerEndpointExporter.afterSingletonsInstantiated(ServerEndpointExporter.java:112)

at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:864)

at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:877)?

at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:549)?

at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:141)

at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:744)

at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:391)

at org.springframework.boot.SpringApplication.run(SpringApplication.java:312)

at org.springframework.boot.SpringApplication.run(SpringApplication.java:1215)

at org.springframework.boot.SpringApplication.run(SpringApplication.java:1204)?

at com.dreamwhale.pokermister.PokerMisterApplication.main(PokerMisterApplication.java:10)

Caused by: javax.websocket.DeploymentException: The path [game] is not valid.

at org.apache.tomcat.websocket.server.UriTemplate.<init>(UriTemplate.java:48) ~[tomcat-embed-websocket-9.0.26.jar:9.0.26]

at org.apache.tomcat.websocket.server.WsServerContainer.addEndpoint(WsServerContainer.java:161)

at org.apache.tomcat.websocket.server.WsServerContainer.addEndpoint(WsServerContainer.java:278)?

at org.apache.tomcat.websocket.server.WsServerContainer.addEndpoint(WsServerContainer.java:228)?

at org.springframework.web.socket.server.standard.ServerEndpointExporter.registerEndpoint(ServerEndpointExporter.java:156)?

... 12 common frames omitted


? ? ? ? 這個(gè)報(bào)錯(cuò)也是一個(gè)小失誤他提示的這個(gè)路徑是無效的那么我們檢查一下WebSocket是不是寫成了這樣

? ??????????????@ServerEndpoint(value ="game")




本文章是本人在工作中遇到的一些小問題彭则,那么想了解更多java只是可以關(guān)注我鳍刷,我會(huì)不定時(shí)更新文章,可能有你需要的喲俯抖!點(diǎn)個(gè)關(guān)注再走输瓜!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市芬萍,隨后出現(xiàn)的幾起案子尤揣,更是在濱河造成了極大的恐慌,老刑警劉巖柬祠,帶你破解...
    沈念sama閱讀 217,509評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件北戏,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡漫蛔,警方通過查閱死者的電腦和手機(jī)嗜愈,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來莽龟,“玉大人蠕嫁,你說我怎么就攤上這事√河” “怎么了剃毒?”我有些...
    開封第一講書人閱讀 163,875評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長奶镶。 經(jīng)常有香客問我迟赃,道長,這世上最難降的妖魔是什么厂镇? 我笑而不...
    開封第一講書人閱讀 58,441評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮左刽,結(jié)果婚禮上捺信,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好迄靠,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,488評(píng)論 6 392
  • 文/花漫 我一把揭開白布秒咨。 她就那樣靜靜地躺著,像睡著了一般掌挚。 火紅的嫁衣襯著肌膚如雪雨席。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,365評(píng)論 1 302
  • 那天吠式,我揣著相機(jī)與錄音陡厘,去河邊找鬼。 笑死特占,一個(gè)胖子當(dāng)著我的面吹牛糙置,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播是目,決...
    沈念sama閱讀 40,190評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼谤饭,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了懊纳?” 一聲冷哼從身側(cè)響起揉抵,我...
    開封第一講書人閱讀 39,062評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎嗤疯,沒想到半個(gè)月后功舀,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,500評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡身弊,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,706評(píng)論 3 335
  • 正文 我和宋清朗相戀三年辟汰,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片阱佛。...
    茶點(diǎn)故事閱讀 39,834評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡帖汞,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出凑术,到底是詐尸還是另有隱情翩蘸,我是刑警寧澤,帶...
    沈念sama閱讀 35,559評(píng)論 5 345
  • 正文 年R本政府宣布淮逊,位于F島的核電站催首,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏泄鹏。R本人自食惡果不足惜郎任,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,167評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望备籽。 院中可真熱鬧舶治,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至惜浅,卻和暖如春瘫辩,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背坛悉。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評(píng)論 1 269
  • 我被黑心中介騙來泰國打工伐厌, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人吹散。 一個(gè)月前我還...
    沈念sama閱讀 47,958評(píng)論 2 370
  • 正文 我出身青樓弧械,卻偏偏與公主長得像,于是被迫代替她去往敵國和親空民。 傳聞我的和親對(duì)象是個(gè)殘疾皇子刃唐,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,779評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容