当前位置: 首页 > Web前端 > HTML5

你可能不知道的浏览器实时通讯方案

时间:2023-04-05 20:33:48 HTML5

鏈枃涓昏璁ㄨ鐜伴樁娈靛湪娴忚鍣ㄧ鍙鐨勫疄鏃堕€氳鏂规锛屼互鍙婂畠浠殑鍙戝睍鍘嗙▼銆傝繖閲屾垜浠互sockjs浣滀负鍏ュ彛锛屽畠鏄竴涓祦琛岀殑娴忚鍣ㄥ疄鏃堕€氫俊搴撱€傛敮鎸佽法鍩熷疄鏃堕€氫俊閫氶亾銆備富瑕佺壒鐐规槸bionicWebsocket锛屼細浼樺厛浣跨敤Websocket浣滀负浼犺緭灞傦紝鍦ㄤ笉鏀寔WebSocket鐨勭幆澧冧笅鍥為€€鍒板叾浠栨柟妗堬紝姣斿XHR-Stream鍜宲olling銆傛墍浠ockjs鏈韩灏辨槸涓€涓祻瑙堝櫒瀹炴椂閫氫俊瑙e喅鏂规鐨勭紪骞村彶锛屾湰鏂囦篃鎸夌収浠庢柊鍒版棫鐨勯『搴忎粙缁嶄簡杩欎簺瑙e喅鏂规銆傜被浼約ockjs鍜宻ocket.io鐨勮В鍐虫柟妗堝鏋滆寰楁枃绔犱笉閿欙紝璇蜂笉瑕佸悵鍟綘鐨勮禐馃憤锛岄紦鍔变綔鑰呭啓涓€绡囨洿绮惧僵鐨勬枃绔犵洰褰昗ebSocketXHR-streamingEventSourceHtmlFilePolling闀胯疆璇㈡墿灞昗ebSocketWebSocket涓嶆槸鏈枃鐨勪富瑙掞紝杩樻湁缃戜笂宸茬粡鏈夊緢澶氭暀绋嬩簡銆傛湰鏂囩殑鐩殑鏄粙缁峎ebSocket涔嬪鐨勪竴浜涘洖閫€鏂规銆傚綋娴忚鍣ㄤ笉鏀寔Websocket鏃讹紝鎮ㄥ彲浠ラ€夋嫨鍥為€€鍒拌繖浜涜В鍐虫柟妗堛€傚湪杩欓噷浠嬬粛Websocket涔嬪墠锛屾垜浠厛浜嗚В涓€涓婬TTP鐨勪竴浜涘熀纭€鐭ヨ瘑銆傛瘯绔焀ebSocket鏈韩灏辨槸浣跨敤HTTP鍗忚瀹炵幇鐨勩€侶TTP鍗忚鏄熀浜嶵CP/IP鐨勫簲鐢ㄥ眰鍗忚锛屼篃灏辨槸璇碒TTP鍦═CP杩炴帴涓繘琛岃姹傚拰鍝嶅簲銆傛祻瑙堝櫒灏嗕负姣忎釜璇锋眰寤虹珛涓€涓猅CP杩炴帴銆傝姹傜瓑寰呮湇鍔″櫒鍝嶅簲锛屾湇鍔″櫒鍝嶅簲鍚庡叧闂繛鎺ワ細鍚庢潵浜轰滑鍙戠幇涓烘瘡涓狧TTP璇锋眰寤虹珛涓€涓猅CP杩炴帴澶氮璐硅祫婧愪簡銆傝兘涓嶈兘涓嶈鎬ヤ簬鍏抽棴TCP杩炴帴锛岃€屾槸澶氳矾澶嶇敤锛屽湪涓€涓猅CP杩炴帴涓繘琛屽涓姹傘€傝繖灏卞紩鍑轰簡HTTP鎸佷箙杩炴帴锛圚TTPpersistentconnection锛屼篃绉颁负HTTPkeep-alive锛夛紝瀹冧娇鐢ㄥ悓涓€涓猅CP杩炴帴鏉ュ彂閫佸拰鎺ユ敹澶氫釜HTTP璇锋眰/鍝嶅簲銆傛寔涔呰繛鎺ョ殑鏂瑰紡鍙互澶уぇ鍑忓皯绛夊緟鏃堕棿锛屽弻鏂逛笉闇€瑕侀噸鏂拌繘琛孴CP鎻℃墜锛岃繖瀵逛簬鍓嶇闈欐€佽祫婧愮殑鍔犺浇涔熼潪甯告湁鎰忎箟锛氬ソ浜嗭紝鐜板湪鍥炲埌WebSocket锛屾祻瑙堝櫒绔敤鎴风▼搴忎笉鏀寔鐩存帴寤虹珛鏈嶅姟绔疶CP杩炴帴锛屼絾鏄垜浠笂闈㈢湅鍒版瘡涓€涓狧TTP璇锋眰閮戒細寤虹珛涓€涓猅CP杩炴帴銆俆CP鏄彲闈犵殑鍏ㄥ弻宸ユ暟鎹€氫俊閫氶亾锛岄偅涔堟垜浠负浠€涔堜笉鐩存帴浣跨敤瀹冭繘琛屽疄鏃堕€氫俊鍛紵杩欏氨鏄疻ebsocket鐨勫師鐞嗭紒杩欓噷鎴戜滑鐢ㄤ竴寮犲浘鏉ョ畝鍗曠悊瑙d竴涓媁ebsocket鐨勫師鐞嗭細浠庝笂鍥惧彲浠ョ湅鍑猴紝WebSocket鍦ㄦ渶鍒濆缓绔嬭繛鎺ユ椂闇€瑕佷緷璧栧凡鏈夌殑HTTP鍗忚锛屽叾浠栨椂鍊欑洿鎺ュ熀浜嶵CP瀹屾垚閫氫俊.杩欐槸娴忚鍣ㄤ腑鏈€鎺ヨ繎濂楁帴瀛楃殑API锛屽彲浠ュ疄鏃朵笌鏈嶅姟鍣ㄨ繘琛屽叏鍙屽伐閫氫俊銆備笌浼犵粺娴忚鍣ㄧ殑Comet锛夋妧鏈紙涓嬫枃浠嬬粛锛夌浉姣旓紝WebSocket鏈夊緢澶氫紭鍔匡細瀹炴椂鎬ф洿寮恒€傚熀浜嶵CP鍗忚鐨勫叏鍙屽伐閫氫俊鏁堢巼鏇撮珮銆備竴鏂归潰锛屾暟鎹寘鐩稿杈冨皬銆傚彟涓€鏂归潰锛屽畠姣斾紶缁熺殑XHR-Streaming鍜岃疆璇㈡柟寮忔洿楂樻晥锛屼笉闇€瑕侀噸澶嶅缓绔婽CP杩炴帴銆傛洿濂界殑浜岃繘鍒舵敮鎸併€俉ebsocket瀹氫箟浜岃繘鍒跺抚銆備笌HTTP鐩告瘮锛屽畠鍙互鏇磋交鏉惧湴澶勭悊浜岃繘鍒跺唴瀹瑰苟淇濇寔杩炴帴鐘舵€併€備笌HTTP鏃犵姸鎬佸崗璁浉姣旓紝WebSocket鍙渶瑕佸湪寤虹珛杩炴帴鏃舵惡甯﹁璇佷俊鎭紝鍚庣画閫氫俊閮藉湪杩欎釜session鍐呰繘琛岋紝鏀寔鎵╁睍銆俉ebsocket瀹氫箟浜嗘墿灞曪紝鐢ㄦ埛鍙互鎵╁睍鍗忚骞跺疄鐜颁竴浜涜嚜瀹氫箟鐨勫瓙鍗忚銆傛瘮濡傛湁浜涙祻瑙堝櫒鏀寔鍘嬬缉绛夛紝瀹冪殑鎺ュ彛涔熷緢绠€鍗曪細constws=newWebSocket('ws://localhost:8080/socket');//閿欒澶勭悊ws.onerror=(error)=>{...}//鍏抽棴杩炴帴ws.onclose=()=>{...}//寤虹珛杩炴帴ws.onopen=()=>{//鍚戞湇鍔″櫒鍙戦€佹秷鎭痺s.send("ping");}//鎺ユ敹鏈嶅姟鍣ㄥ彂閫佺殑娑堟伅ws.onmessage=(msg)=>{if(msg.datainstanceofBlob){//澶勭悊浜岃繘鍒朵俊鎭痯rocessBlob(msg.data);}else{//澶勭悊鏂囨湰淇℃伅processText(msg.data);}}鏈枃涓嶄細娣卞叆鍒嗘瀽Websocket鍗忚鐨勭粏鑺傘€傛湁鍏磋叮鐨勮鑰呭彲浠ラ槄璇讳互涓嬫枃绔狅細WebSocketWebSocket娴呮瀽闃竴宄帮細WebSocket鏁欑▼濡傛灉涓嶈€冭檻IE鐨勪綆鐗堟湰锛屽熀鏈笂WebSocket涓嶄細鏈夊吋瀹规€ч棶棰樹笅闈㈠垪涓句簡Websocket鐨勪竴浜涘父瑙侀棶棰樸€傚綋Websocket涓嶈兘姝e父浣跨敤鏃讹紝鍙互浣跨敤sockjs鎴栬€卻ocket.io鍥為€€鍒颁紶缁熺殑Comet鎶€鏈柟妗堛€傛祻瑙堝櫒鍏煎鎬с€侷E10鍙婁互涓嬩笉鏀寔Safari銆備笉鍏佽浣跨敤闈炴爣鍑嗘帴鍙e缓绔嬭繛鎺ュ績璺炽€俉ebSocket鏈韩涓嶇淮鎶ゅ績璺虫満鍒讹紝鏈変簺Websocket瀹炵幇浼氬湪绌洪棽涓€娈垫椂闂村悗鑷姩鏂紑杩炴帴銆傛墍浠ockjs涔嬬被鐨勫簱浼氬府浣犱繚鎸佸績璺炽€備竴浜涜礋杞藉钩琛℃垨浠g悊涓嶆敮鎸乄ebsocket銆備細璇濆拰娑堟伅闃熷垪缁存姢銆傝繖浜涗笉鏄疻ebsocket鍗忚鐨勮矗浠伙紝鑰屾槸搴旂敤绋嬪簭鐨勮矗浠汇€俿ockjs浼氫负姣忎釜Websocket杩炴帴缁存姢涓€涓猻ession锛屽湪杩欎釜session涓細缁存姢涓€涓秷鎭槦鍒楋紝杩欐牱褰揥ebsocket鎰忓鏂紑鏃舵暟鎹笉浼氫涪澶便€傚ソ鐨勯€夋嫨銆俋HR-streaming鐨勫師鐞嗕篃姣旇緝绠€鍗曪細鏈嶅姟鍣ㄥ搷搴旈噰鐢–hunked浼犺緭缂栫爜鐨凥TTP浼犺緭鏈哄埗锛屾湇鍔″櫒涓嶇粓姝TTP鍝嶅簲娴侊紝浣縃TTP濮嬬粓澶勪簬闀胯繛鎺ョ姸鎬併€傚綋鏈夋暟鎹渶瑕佸彂閫佺粰瀹㈡埛绔椂鍐欏叆鏁版嵁銆備笉娓呮锛屼笉鐭ラ亾锛屼笉鎳傦紵娌″叧绯伙紝鎴戜滑涓€姝ユ鏉ワ紝鐪嬬湅姝e父鐨凥TTP璇锋眰澶勭悊锛?/Node.js浠g爜consthttp=require('http')constserver=http.createServer((req,res)=>{res.writeHead(200,{'Content-Type':'text/plain',//璁剧疆鍐呭鏍煎紡'Content-Length':11,//璁剧疆鍐呭闀垮害})res.end('helloworld')//Response})瀹㈡埛绔細绔嬪嵆鏀跺埌鍝嶅簲锛氶偅涔堜粈涔堟槸鍒嗗潡浼犺緭缂栫爜锛熷湪HTTP/1.0涔嬪墠锛宺esponse蹇呴』浣滀负涓€鏁存潯鏁版嵁杩斿洖缁欏鎴风锛堝涓婁緥锛夛紝杩欏氨瑕佹眰鏈嶅姟绔彂閫乺esponse涔嬪墠蹇呴』璁剧疆Content-Length锛屾祻瑙堝櫒鍙互鍒ゆ柇缁撴潫浠呭湪鐭ラ亾鏁版嵁澶у皬鍚庣殑鍝嶅簲鏃堕棿銆傝繖浣垮緱鏈嶅姟鍣ㄥ搷搴斿姩鎬佸唴瀹圭殑鏁堢巼闈炲父浣庛€傚畠蹇呴』绛夊緟鐢熸垚鎵€鏈夊姩鎬佸唴瀹癸紝鐒跺悗鎵嶈兘璁$畻Content-Length锛岀劧鍚庡啀灏嗗叾鍙戦€佺粰瀹㈡埛绔€傚鏋滃搷搴旂殑鍐呭寰堝ぇ锛屼細鍗犵敤澶ч噺鐨勫唴瀛樼┖闂淬€侶TTP/1.1寮曞叆浜員ransfer-Encoding:chunked;鏍囧ご銆傚畠鍏佽鏈嶅姟鍣ㄥ彂閫佺粰瀹㈡埛绔簲鐢ㄧ▼搴忕殑鏁版嵁琚垎鎴愬涓儴鍒嗗苟浠ヤ竴涓垨澶氫釜鍧楀彂閫侊紝杩欐牱鏈嶅姟鍣ㄥ氨鍙互鍙戦€佹暟鎹€屾棤闇€浜嬪厛璁$畻鍙戦€佸唴瀹圭殑鎬诲ぇ灏忋€傞€氳繃鍒嗗潡浼犺緭鏈哄埗锛屽姩鎬佺敓鎴愬唴瀹圭殑鏈嶅姟鍣ㄥ彲浠ヤ繚鎸丠TTP闀胯繛鎺ワ紝涔熷氨鏄锛岀洿鍒版湇鍔″櫒鍝嶅簲娴佺粨鏉燂紝TCP杩炴帴鎵嶄細鏂紑銆傜幇鍦ㄦ垜浠垏鎹㈠埌鍒嗗潡浼犺緭缂栫爜妯″紡锛屾垜浠笉缁堟鍝嶅簲娴侊紝鐪嬬湅浼氬彂鐢熶粈涔堬細consthttp=require('http')constserver=http.createServer((req,res)=>{res.writeHead(200,{'Content-Type':'text/plain'//'Content-Length':11,//馃敶鍘绘帀Content-Length澶达紝Node.js榛樿浣跨敤鍒嗗潡缂栫爜})res.write('helloworld')//res.end()//馃敶涓嶇粓姝㈣緭鍑烘祦})鎴戜滑浼氬彂鐜拌姹備細涓€鐩村浜嶱ending鐘舵€侊紙缁胯壊涓嬭浇鍥炬爣锛夛紝闄ら潪鍑虹幇寮傚父锛屽惁鍒欐湇鍔″櫒鏄痗losed鎴栬€呮樉寮忓叧闂繛鎺ワ紙姣斿璁剧疆瓒呮椂鏈哄埗锛夛紝璇锋眰姘歌繙涓嶄細缁堟銆備絾鏄嵆浣垮浜嶱ending鐘舵€侊紝瀹㈡埛绔粛鐒跺彲浠ュ湪涓嶇瓑寰呰姹傜粨鏉熺殑鎯呭喌涓嬫帴鏀舵暟鎹細鍩轰簬杩欎釜鍘熺悊锛屾垜浠潵鍒涘缓涓€涓畝鍗曠殑涔掍箵鏈嶅姟鍣細constserver=http.createServer((req,res)=>{if(req.url==='/ping'){//ping璇锋眰if(pendingResponse==null){res.writeHead(500);res.write('sessionnotfound');res.end();return;}res.writeHead(200)res.end()//鎺ㄩ€佸埌瀹㈡埛绔痯endingResponse.write('pong\n');}else{//淇濆瓨鍙ユ焺res.writeHead(200,{'Content-Type':'text/plain',});res.write('welcometoping\n');pendingResponse=res}});娴嬭瘯涓€涓嬶紝鍦ㄥ彟涓€涓獥鍙h闂?ping璺緞锛歄K锛佽繖灏辨槸XHR-Streaming锛侀偅涔圓jax鎺ユ敹杩欎簺鏁版嵁鍛紵鈶犱竴绉嶆柟娉曟槸鍦╔MLHttpRequest鐨刼nreadystatechange浜嬩欢澶勭悊鍑芥暟涓垽鏂璻eadyState鏄惁绛変簬XMLHttpRequest.LOADING锛涒憽鍙︿竴绉嶆柟娉曟槸鍦▁hr.onprogress浜嬩欢澶勭悊鍣ㄤ腑澶勭悊銆備互涓嬫槸ping瀹㈡埛绔疄鐜帮細functionlisten(){constxhr=newXMLHttpRequest();xhr.onprogress=()=>{//娉ㄦ剰responseText鏄幏鍙栨湇鍔″櫒鍙戦€佺殑鎵€鏈夋暟鎹€傚鏋滆鑾峰彇鏈鏁版嵁锛屽垯闇€瑕佸垎console.log('progress',xhr.responseText);}xhr.open('POST',HOST);xhr.send(null);}functionping(){constxhr=newXMLHttpRequest();xhr.open('POST',HOST+'/ping');xhr.send(null);}listen();setInterval(ping,5000);鎱㈡參鏉ワ紝鍒珮鍏村緱澶棭馃槹銆傚鏋滆繍琛屼笂闈㈢殑浠g爜浼氬彂鐜皁nprogress娌℃湁姝e父瑙﹀彂锛屽叿浣撳師鍥犵瑪鑰呬篃娌℃湁鐮旂┒銆傚彂鐜皊ockjs鏈嶅姟绔簮鐮侀噷棰勫厛鍐欎簡2049瀛楄妭锛岃繖鏍峰氨鍙互姝e父瑙﹀彂onprogress浜嬩欢浜嗭細constserver=http.createServer((req,res)=>{if(req.url==='/ping'){//ping璇锋眰//...}else{//淇濆瓨鍙ユ焺res.writeHead(200,{'Content-Type':'text/plain',});res.write(Array(2049).join('h')+'\n');pendingResponse=res}});鏈€鍚庤鏄庝竴涓媂HR-streaming鐨勫師鐞嗭細涓€涓€荤粨鍏佽鏈嶅姟鍣ㄨ繛缁彂閫佹秷鎭€屼笉蹇呮瘡娆″搷搴旈兘寤虹珛杩炴帴锛屽洜姝ゅ畠鏄疻ebsocket鐨勬浛浠e搧鏈€楂樻晥鐨勫疄鏃堕€氫俊瑙e喅鏂规銆備絾瀹冨苟涓嶅畬缇庛€備緥濡傦紝XHR-streaming杩炴帴鏃堕棿瓒婇暱锛屾祻瑙堝櫒灏变細鍗犵敤杩囧鐨勫唴瀛橈紝姣忔鏈夋柊鐨勬暟鎹埌鏉ワ紝閮介渶瑕佸娑堟伅杩涜鍒嗘祦鍜屽墧闄ゃ€備涪寮冩帴鏀跺埌鐨勬暟鎹€傚洜姝わ紝sockjs瀵瑰叾杩涜浜嗕竴鐐逛紭鍖栥€傛瘮濡俿ockjs榛樿鍙厑璁告瘡涓獂hr-streaming杩炴帴杈撳嚭128kb鐨勬暟鎹€傚綋瓒呰繃杩欎釜澶у皬鏃讹紝瀹冧細鍏抽棴杈撳嚭娴侊紝璁╂祻瑙堝櫒閲嶆柊鍙戣捣璇锋眰銆侲ventSource鐞嗚ВXHR-Streaming锛屼綘浼氳寰桬ventSource涓嶆槸浠€涔堟柊椴滀笢瑗匡細灏辨槸涓婇潰璇寸殑XHR-streaming锛屽彧鏄祻瑙堝櫒缁欏畠鎻愪緵浜嗘爣鍑嗙殑API灏佽鍜屽崗璁紝浣犳姄鍖呯湅鐪嬪叾瀹炰笉澶氫笌XHR-streaming鐨勫尯鍒細涓婇潰鍙互鐪嬪埌request鐨凙ccept鏄痶ext/event-stream锛屾湇鍔$鍐欏叆鐨勬暟鎹湁涓€涓爣鍑嗙殑绾﹀畾锛屽嵆load闇€瑕佽繖鏍风粍缁囷細constdata=`data:${payload}\r\n\r\n`EventSourceAPI绫讳技浜嶹ebsocket锛屼緥瀛愶細constevtSource=newEventSource('sse.php');//鎵撳紑杩炴帴evtSource.onopen=()=>{}//鎺ュ彈娑堟伅evtSource.onmessage=function(e){//鍋氱偣浠€涔?/...console.log("message:"+e.data)//鍏抽棴娴乪vtSource.close()}//exceptionevtSource.onerror=()=>{}鍥犱负鏄疭tandard锛屾祻瑙堝櫒璋冭瘯涔熸瘮杈冩柟渚匡紝涓嶉渶瑕佷娇鐢ㄧ涓夋柟鎶撳寘宸ュ叿锛欻tmlFile杩欐槸涓€涓彜鑰佺殑鈥樼鏈€欚煒傦紝铏界劧鎴戜滑鍙兘姘歌繙閮戒笉浼氬啀娆′娇鐢ㄥ畠锛屼絾鏄畠鐨勫疄鐜版柟娉曟瘮杈冩湁瓒o紙绫讳技浜嶫SONP涔嬬被鐨勯粦绉戞妧锛夛紝鎵€浠ュ€煎緱涓€鎻愩€侶tmlFile鐨勫彟涓€涓悕瀛楀彨鍋氭案涔呭抚锛坒orever-frame锛夈€傞【鍚嶆€濅箟锛屾祻瑙堝櫒浼氭墦寮€涓€涓殣钘忕殑iframe锛岃繖涓猧frame浼氳姹備竴涓猚hunked浼犺緭缂栫爜鐨刪tml鏂囦欢锛圱ransfer-Encoding:chunked锛夛紝鍜孹HR-Streaming涓€鏍凤紝杩欎釜璇锋眰姘歌繙涓嶄細缁撴潫锛屽苟涓旀湇鍔″櫒浼氱户缁緭鍑鸿繖涓枃浠剁殑鍐呭銆傝繖閲岀殑瑕佺偣鏄幇浠f祻瑙堝櫒浼氬閲忔覆鏌揾tml鏂囦欢锛屾墍浠ユ湇鍔$鍙互閫氳繃娣诲姞script鏍囩鍦ㄥ鎴风鎵ц涓€浜涗唬鐮併€傛湇鍔$閫氳繃鍥炶皟灏嗘暟鎹紶閫掔粰鐖舵枃妗b憽褰撴湇鍔$鏈夋柊鏁版嵁鏃讹紝鍦ㄦ枃妗d笂闄勫姞涓€涓?script>鏍囩锛岃剼鏈殑浠g爜灏辨槸灏嗘暟鎹紶閫掔粰鍥炶皟銆傚埄鐢ㄦ祻瑙堝櫒浼氫笅杞藉苟瑙f瀽HTML鏂囨。鐨勭壒鎬э紝鏂版坊鍔犵殑鑴氭湰浼氱珛鍗虫墽琛屻€傛渶鍚庣敤娴佺▼鍥炬潵鎻忚堪涓€涓嬶細闄や簡IE6銆?锛屽ぇ閮ㄥ垎娴忚鍣ㄩ兘鏀寔杩欑鏂规銆傚綋娴忚鍣ㄤ笉鏀寔XHR-streaming鏃讹紝鍙互浣滀负鏈€濂界殑澶囪儙銆傝疆璇㈣疆璇㈡槸鏈€绮楃硻锛堟垨鏈€绠€鍗曪級涓旀晥鐜囨渶浣庣殑鈥滃疄鏃垛€濋€氫俊鏂规銆傝繖绉嶆柟寮忕殑鍘熺悊鏄懆鏈熸€х殑鍚戞湇鍔″櫒鍙戣捣璇锋眰锛屾媺鍙栨渶鏂扮殑娑堟伅闃熷垪锛氳繖绉嶈疆璇㈢殑鏂瑰紡姣旇緝閫傚悎鏈嶅姟鍣ㄤ俊鎭畾鏈熸洿鏂扮殑鍦烘櫙锛屾瘮濡傚ぉ姘斻€佽偂绁ㄨ鎯呬俊鎭瓑銆備緥濡傦紝鑲$エ淇℃伅姣?鍒嗛挓鏇存柊涓€娆°€傛鏃跺鎴风瀹氭椂杞锛岃疆璇㈤棿闅斾笌鏈嶅姟绔殑鏇存柊棰戠巼涓€鑷淬€傝繖鏄竴绉嶇悊鎯崇殑鏂瑰紡銆備絾鏄鏋滆拷姹傚疄鏃舵€э紝杞浼氬甫鏉ヤ竴浜涗弗閲嶇殑闂锛氳祫婧愭氮璐广€備緥濡傦紝濡傛灉杞闂撮殧灏忎簬鏈嶅姟鍣ㄤ俊鎭洿鏂伴鐜囷紝杩欏皢娴垂澶ч噺鐨凥TTP璇锋眰锛屾秷鑰楀疂璐电殑CPU鏃堕棿鍜屽甫瀹斤紝骞朵笖瀹规槗瀵艰嚧璇锋眰杞扮偢銆傛瘮濡傚綋鏈嶅姟鍣ㄨ礋杞芥瘮杈冮珮鐨勬椂鍊欙紝绗竴涓姹傝繕娌℃湁澶勭悊瀹屻€傝繖鏃跺€欙紝绗簩涓拰绗笁涓姹傛帴韪佃€岃嚦锛屾棤鐢ㄧ殑棰濆璇锋眰鐙傝桨婊ョ偢鏈嶅姟鍣ㄣ€傞暱杞杩樻湁涓€绉嶄紭鍖栫殑杞鏂瑰紡锛屽彨鍋氶暱杞锛圠ongPolling锛夛紝sockjs灏辨槸浣跨敤杩欑杞鏂瑰紡锛岄暱杞灏辨槸娴忚鍣ㄥ悜鏈嶅姟鍣ㄥ彂閫佽姹傦紝鏈嶅姟鍣ㄥ彧鏈夊湪鏈夋柊鏁版嵁鏃舵墠鍝嶅簲锛氬鎴风鍚戞湇鍔″櫒鍙戣捣娑堟伅鑾峰彇璇锋眰锛屾湇鍔″櫒杩斿洖褰撳墠娑堟伅闃熷垪缁欏鎴风锛岀劧鍚庡叧闂繛鎺ャ€傚綋娑堟伅闃熷垪涓虹┖鏃讹紝鏈嶅姟鍣ㄤ笉浼氱珛鍗冲叧闂繛鎺ワ紝鑰屾槸绛夊緟鎸囧畾鐨勬椂闂撮棿闅斻€傚鏋滃湪杩欎釜鏃堕棿闂撮殧鍐呮病鏈夋柊鐨勬秷鎭紝瀹㈡埛绔細涓诲姩瓒呮椂骞跺叧闂繛鎺ャ€傝繕鏈夊緢閲嶈鐨勪竴鐐瑰氨鏄鎴风鐨勮疆璇㈣姹傚彧鏈夊湪涔嬪墠鐨勮姹傝繛鎺ュ叧闂悗鎵嶄細閲嶆柊鍙戣捣銆傝繖鏍峰氨瑙e喅浜嗕笂闈㈢殑璇锋眰杞扮偢闂銆傛湇鍔″櫒鍙互鎺у埗瀹㈡埛绔姹傜殑鏃舵満锛屽洜涓哄湪鏈嶅姟鍣ㄦ病鏈夊搷搴斾箣鍓嶏紝瀹㈡埛绔笉浼氬彂閫侀澶栫殑璇锋眰锛堝湪瓒呮椂鏈熼棿锛夈€侲xtendedWebRTC杩欐槸涓€绉嶆祻瑙堝櫒鐨勫疄鏃堕€氫俊鎶€鏈紝瀹冨厑璁哥綉缁滃簲鐢ㄧ▼搴忔垨绔欑偣鍦ㄦ祻瑙堝櫒涔嬮棿寤虹珛鐐瑰鐐癸紙Peer-to-Peer锛夎繛鎺ワ紝鏃犻渶涓粙锛屽疄鐜拌棰戞祦鍜岋紙鎴栵級闊抽鐨勪紶杈撴祦鎴栧叾浠栦换鎰忔暟鎹€俶eteorDDPDDP锛圖istributedDataProtocol锛夛紝杩欐槸涓€涓?鏈夌姸鎬?鐨勫疄鏃堕€氫俊鍗忚锛岃繖鏄疢eteor妗嗘灦鐨勫熀纭€锛屽畠浣跨敤杩欎釜鍗忚鍦ㄥ鎴风鍜屾湇鍔″櫒涔嬮棿杩涜閫氫俊銆傚畠鍙槸涓€绉嶅崗璁紝鑰屼笉鏄竴绉嶉€氫俊鎶€鏈紝渚嬪锛屽畠鐨勫簳灞傚彲浠ュ熀浜嶹ebsocket銆乆HR-Streaming銆侀暱杞鐢氳嚦WebRTC銆傜▼搴忓憳鎬庝箞鍙兘涓嶇煡閬揅10K闂鍛紵-杩熷缓寮?Medium

最新推荐
猜你喜欢