当前位置: 首页 > Web前端 > vue.js

vue中使用vue-socket.io的一些心得,踩坑记录

时间:2023-04-01 00:15:54 vue.js

鍓嶈█鍦╲ue椤圭洰涓娇鐢ㄤ簡涓€涓猻ocket闀胯繛鎺ャ€備箣鍓嶄竴鐩翠娇鐢╲ue-socke.io[github鍦板潃]锛屼絾鏄渶杩戝湪浣跨敤鐨勬椂鍊欏嚭鐜颁簡涓€浜涜帿鍚嶅叾濡欑殑bug锛屼篃瀵艰嚧鎺変簡寰堝澶村彂锛岀粓浜庤В鍐充簡銆傚叧浜巗o鈥嬧€媍ket鐩稿叧鐨勫唴瀹瑰拰浣跨敤鍦烘櫙鐨勪粙缁嶏紝杩欓噷灏变笉杩囧浠嬬粛浜嗭紙涓昏鏄噿锛夛紝鍙互鐪嬪叾浠栨枃绔犮€傛湰鏂囦富瑕佷粙缁嶅浣曚娇鐢紝浠ュ強鍐嶆浣跨敤鏃剁殑娉ㄦ剰浜嬮」銆傚叧浜庢枃涓敤鍒扮殑浠g爜锛屾垜浼氭斁github鍦板潃銆備竴涓墠绔皬楦燂紝绔嬪織鎴愪负鍓嶇鑿滈笩锛屼笉瓒充箣澶勭暀瑷€鎸囧嚭锛岃阿璋㈠皬瀛愩€傚畨瑁呰繖閲屾垜浠畨瑁呬簡vue.socket.io妯″潡鍜宻ocket.io-client妯″潡锛屾垨鑰呬笉闇€瑕乻ocket.io-client妯″潡锛岃闃呰涓嬫枃銆俢npmivue-socket.io-Scnpmisocket.io-client-Syarnvue-socket.ioyarnisocket.io-clientvue瀹㈡埛绔娇鐢╯ocket.io-client杩炴帴importVuefrom'vue'importAppfrom'./App.vue'importrouterfrom'./router'importstorefrom'./store'importVueSocketIOfrom'vue-socket.io'importSocketIOfrom"socket.io-client"Vue.config.productionTip=false//socket杩炴帴parameterconstsocketOptions={autoConnect:false,//杩欓噷鏄嚜鍔ㄨ繛鎺ワ紝鍥犱负鎴戠殑椤圭洰闇€瑕佸湪鐗瑰畾鎯呭喌涓嬫墠闇€瑕佽繛鎺ocket}//RegisterVue.use(newVueSocketIO({debug:true,//debug璋冭瘯锛岀敓浜у缓璁叧闂璽heconnection:SocketIO("127.0.0.1:1024",socketOptions),store,//濡傛灉涓嶇敤store灏变笉鐢ㄥ啓}))newVue({//杩欓噷鏄叏灞€鐨刲isteningsocketeventmessage锛岃繖閲屽彧鍐欎簡鐩戝惉鍑芥暟杩囨鏃堕棿锛屽叾瀹炴湁寰堝浜嬩欢銆傚鎺ュ瓧锛歿connecting(){console.log('connecting')},disconnect(){console.log("Socketdisconnected");},connect_failed(){cosnole.log('杩炴帴澶辫触')},connect(){console.log('socketconnected')}},router,store,render:h=>h(App)}).$mount('#app')濡傛灉瀛楃涓茶繛鎺ユ甯镐娇鐢紝椤圭洰鍚姩鏃跺彧闇€杩炴帴socket鍗冲彲锛屾棤闇€鍔犺浇socket.io-client妯″潡鍗冲彲鐩存帴浣跨敤銆?/RegisterVue.use(newVueSocketIO({debug:true,//璋冭瘯璋冭瘯锛屽缓璁叧闂繛鎺?127.0.0.1:1024,store,//濡傛灉store娌℃湁鐢ㄥ埌锛屽彲浠ヤ笉鍐檥))鍦ㄧ粍浠?template>connectsocket鍙戦€佹暟鎹?/button>

瀹㈡埛绔娇鐢ㄦ€荤粨Client鑷甫鐩戝惉浜嬩欢connect:鎴愬姛杩炴帴connecting:connectingdisconnect:鏂紑杩炴帴connect_failed:杩炴帴澶辫触error:鍙戠敓閿欒锛屾棤娉曡鍏朵粬ev澶勭悊ent绫诲瀷reconnect_failed锛氶噸杩炲け璐econnect锛氶噸杩炴垚鍔焑cting:閲嶆柊杩炴帴骞剁洃鍚嚜瀹氫箟浜嬩欢鍏ㄥ眬鐩戝惉sockets:{welcome:data=>{console.log('welcomedata',data)}}鐩戝惉this.sockets.subscribe('welcome',data=>{in缁勪欢console.log('welcome',data)})鍙戦€佹秷鎭敞鎰忥細this.sockets鏄敤鏉ョ洃鍚殑锛宼his.$socket鏄敤鏉ュ彂閫佹秷鎭殑锛屼笉瑕佹贩娣唗his.$socket.emit('hello','杩欓噷鏄鎴风')鍏充簬璺ㄥ煙闂锛宻ocket浼氬嚭鐜拌法鍩熼棶棰樸€備箣鍓嶇湅鏂囩珷璇村湪vue涓厤缃唬鐞嗐€傜煡閬撶殑鍚屽璇风暀瑷€鍛婅瘔鎴戯紝瀹為檯椤圭洰涓殑瑙e喅鏂规硶鏄悗绔厤缃法鍩熼棶棰樸€傛湇鍔″櫒浣跨敤杩欓噷涓轰粈涔堣璁叉湇鍔″櫒浣跨敤鍛紵涓昏鏄负浜嗚鍚屽浠洿濂界殑浣撻獙socket锛屼簩鏉ヤ篃鏄负浜嗗悗闈㈠紩鍑篵ug銆傝繖涔熸槸涓€绉嶆墿灞曠煡璇嗙殑鏂瑰紡銆備綘瑙夊緱浣犺禋鍒伴挶浜嗗悧锛熷湪鏈湴鍚敤濂楁帴瀛楁湇鍔′互渚挎洿濂藉湴璋冭瘯銆傛湇鍔″櫒涓昏浣跨敤node.姣曠珶鎴戜滑涓嶆噦java锛宲ython....杩欓噷閰嶇疆socket璺ㄥ煙銆?**@Description:*@version:*@Author:fanliu*@Date:2020-06-1918:22*@LastEditors:fanliu*@LastEditTime:2020-06-1918:30*/varhttp=require('http');vario=require('socket.io');//鍒涘缓鏈嶅姟鍣ㄦ湇鍔arserver=http.createServer(function(req,res){varheaders={};headers["Access-Control-Allow-Origin"]="*";headers["Access-Control-Allow-Methods"]="POST,GET,PUT,DELETE,OPTIONS";headers["Access-Control-Allow-Credentials"]=true;headers["Access-Control-Max-Age"]='86400';//24灏忔椂headers["Access-Control-Allow-Headers"]="X-Requested-With,Access-Control-Allow-Origin,X-HTTP-Method-Override,Content-Type,Authorization,Accept";res.writeHead(200,headers);res.end();});//鍚姩鏈嶅姟鍣ㄧ洃鍚?024绔彛server.listen(1024,function(){console.log('serverrunningat127.0.0.1:1024')})//鍚姩濂楁帴瀛楁湇鍔arsocket=io.listen(server,{origins:'*:*'});//鐩戝惉瀹㈡埛绔繛鎺ocket.on('connection',function(socket){console.log('Clienthasconnection')//鐩戝惉瀹㈡埛绔柇寮€socket.on('disconnect',()=>{console.log('Clientdisconnected')})//鍚戝鎴风鍙戦€佹秷鎭痵ocket.emit('welcome','Welcometoconnectsocket')//鐩戝惉瀹㈡埛绔秷鎭痵ocket.on('hello',data=>{console.log('鎺ユ敹瀹㈡埛绔彂閫佺殑鏁版嵁',data)})});鏈嶅姟绔€荤粨灏辨槸鏈嶅姟绔帴鏀跺拰鍙戦€佹秷鎭拰瀹㈡埛绔氦鎹紝瀹㈡埛绔彂鍑哄拰鍙戦€佹秷鎭紝鎵€浠ユ湇鍔$蹇呴』鍦ㄧ洃鍚鎴风鍙戦€佹秷鎭拰鏈嶅姟锛岃繖鍜岃俯鍧戣闃呬簨浠舵槸涓€鏍风殑銆傝寰楀彇娑坰ocket锛屼富瑕佹槸鐢ㄦ潵鍐欒亰澶╁鐨勩€傚姞鍏ユ彃搴ф埧鍚庯紝鎮ㄥ繀椤昏闃呮埧闂村唴鐨勬墍鏈夎亰澶╁唴瀹广€傚鏋滀笉鍙栨秷涔嬪墠鐨勮闃呬簨浠讹紝涓嬫杩涘叆浼氬娆¤闃呰娑堟伅銆備篃灏辨槸璇达紝鍒汉鍙彂涓€鏉℃秷鎭紝鑰屼綘鍗存敹鍒颁袱鏉℃垨鏇村鏉℃秷鎭€傚浣曢€€璁紵鎴戠殑鍋氭硶鏄湪绂诲紑褰撳墠鑱婂ぉ椤甸潰鍚庯紝鑷姩鍙栨秷涔嬪墠鎵€鏈夌殑璁㈤槄浜嬩欢銆俠eforeDestroy(){this.sockets.unsubscribe(eventName)}鍚屾牱锛屽鏋滄湁鎸囧畾椤甸潰鍔犲叆socket鎴块棿锛岄€€鍑洪〉闈㈡椂璁板緱鍏抽棴socket杩炴帴銆傛瘮濡傚湪created涓紑濮嬭繛鎺ocket锛岃寰楀湪beforeDestroy涓叧闂璼ocket锛屽惁鍒欎笅娆¤繘鍏ユ椂涔熶細杩炴帴鍒皊ocket銆俢reated(){this.$socket.open()//妫€鏌ocket鏄惁杩炴帴鎴愬姛this.$socket.connected}beforeDestroy(){this.$socket.close()}TypeError:this.sockets.subscribeisnotafunction杩欐槸鎴戞渶杩戦亣鍒扮殑涓€涓棶棰樸€傛垜浠ヤ负鏄垜鐨則his鎸囧悜鐨勯棶棰橈紝鐒跺悗浠庡ご鍒板熬妫€鏌ヤ簡鏁翠釜閫昏緫this锛屽彂鐜颁笉鏄棶棰樻墍鍦ㄣ€傛墦鍗皌his.sockets鍚庡彂鐜伴棶棰榮ubscribe璁㈤槄浜嬩欢涓嶆槸鐩存帴瀛樺湪鐨勶紝鑰屾槸涓€涓璞$殑涓€涓€嬧€嬪睘鎬э紝浜庢槸灏濊瘯浜唗his.sockets.listenner.subscribe锛屽彂鐜板彲浠ャ€備綘浠ヤ负杩欏氨鏄粨灞€锛燂紵锛熺劧鍚庡彂鐜伴棶棰榮ockets:{welcome:data=>{console.log('welcomedata',data)}}骞朵笖鍦╯ubscribed浜嬩欢涓紝socket鏃ュ織鏄剧ずcomponent:undefineddata鍏ㄥ眬璁㈤槄浜嬩欢娌℃湁鐢熸晥.鑰宻ocket鑷甫鐨刢onnection浜嬩欢骞舵病鏈夊紑濮嬫墦鍗般€傛垜鐪熸槸鍌讳簡馃槩锛屾垜浠ュ墠鐢ㄧ殑鏃跺€欐病鏈夎繖浜涢棶棰橈紝鍚庢潵鐧惧害浜嗗緢澶氭棤鏋滐紝鎵嶅紑濮嬫眰鍔╁畼鏂广€備簬鏄彂鐜颁簡闂銆俒Vue-Socket.io:#connectsubscribe,component:undefined]()澶ц嚧鎰忔€濇槸闂閮藉湪3.0.9鐗堟湰锛屾洿鏂扮増鏈悗鍙互瑙e喅杩欎釜闂銆傝繖灏辨槸鎴戞妸socketserver鍐欒繘鍘荤殑鍘熷洜銆傝嚜宸卞湪鏈湴鍐欎簡涓€涓皬demo鍚庯紝鏋滅劧鏄増鏈棶棰橈紝鎵嶆兂鍑鸿繖绡囨枃绔犮€傜患涓婃墍杩帮紝鍚屽浠湪浣跨敤vue-socket.io鐨勬椂鍊欒娉ㄦ剰鐗堟湰銆傜洰鍓嶇殑3.0.9鐗堟湰鎴栧鎴栧皯浼氬瓨鍦ㄤ竴浜涢棶棰橈紝鎵€浠ュ彲浠ラ€夋嫨3.0.7鐗堟湰銆傝繖涓彲浠ヤ娇鐢ㄦ枃绔犲紑澶存垜鐨勬祴璇昫emo鏌ョ湅锛岄」鐩腑涔熸湁socket鏈嶅姟浠g爜銆傛湰浜虹涓€娆″湪鎺橀噾鍙戞枃锛岃〃杈炬湁璇瑙佽皡锛屼互鍚庝細鍙戞洿澶氱殑鍓嶇鎶€鏈枃绔狅紝璇峰ぇ瀹跺澶氬叧娉ㄣ€?/p>