7. WebGL Networking

沒有直接套接字訪問

由于安全隱患,JavaScript代碼不能直接訪問IP套接字來實(shí)現(xiàn)網(wǎng)絡(luò)連接。因此,.NET網(wǎng)絡(luò)類(即System.Net名稱空間中的所有內(nèi)容,特別是System.Net.Sockets)在WebGL中不起作用。這同樣適用于Unity的舊版UnityEngine.Network*類,這些類在構(gòu)建WebGL時(shí)不可用。

如果您需要在WebGL中使用網(wǎng)絡(luò),您現(xiàn)在可以選擇使用Unity中的WWW或UnityWebRequest類或支持WebGL的新Unity Networking,或者使用JavaScript中的WebSockets或WebRTC實(shí)現(xiàn)您自己的網(wǎng)絡(luò)。

Using the WWW or WebRequest classes in WebGL

WebGL支持WWWUnityWebRequest類。它們使用JavaScript中的XMLHttpRequest類實(shí)現(xiàn),使用瀏覽器來處理WWW請求。這對訪問跨域資源施加了一些安全限制?;旧?,任何WWW對服務(wù)器的請求都不同于承載WebGL內(nèi)容的服務(wù)器,需要由您嘗試訪問的服務(wù)器授權(quán)。要訪問WebGL中的跨域WWW資源,您嘗試訪問的服務(wù)器需要使用CORS對其進(jìn)行授權(quán)。

如果您嘗試使用WWWUnityWebReqest訪問內(nèi)容,并且遠(yuǎn)程服務(wù)器沒有正確設(shè)置CORS或配置CORS,則您將在瀏覽器控制臺中看到如下錯誤:

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://myserver.com/. This can be fixed by moving the resource to the same domain or enabling CORS.

CORS代表跨源資源共享,并在此處進(jìn)行了說明?;旧?,服務(wù)器需要為它發(fā)送的http響應(yīng)添加一些Access-Control(訪問控制)標(biāo)題,這會告訴瀏覽器它允許網(wǎng)頁訪問服務(wù)器上的內(nèi)容。下面是一個頭文件設(shè)置示例,它允許Unity WebGL從任何來源訪問Web服務(wù)器上的資源,使用公共請求標(biāo)頭并使用http GET,POSTOPTIONS方法:

"Access-Control-Allow-Credentials": "true", "Access-Control-Allow-Headers": "Accept, X-Access-Token, X-Application-Name, X-Request-Sent-Time", "Access-Control-Allow-Methods": "GET, POST, OPTIONS", "Access-Control-Allow-Origin": "*",

請注意,根據(jù)CORS規(guī)范的7.1.1,WWW.responseHeaders僅限于實(shí)際響應(yīng)頭的一個子集。

另請注意,XMLHttpRequest不允許流式傳輸數(shù)據(jù),因此WebGL上的WWW類將只會在下載完成后處理任何數(shù)據(jù)(因此AssetsBundles無法在下載時(shí)像其他平臺上一樣進(jìn)行解壓縮和加載)。

Do not block on WWW or WebRequest downloads 不要阻止WWW或WebRequest下載

不要使用阻止WWW或WebRequest下載的代碼,如下所示:
while(!www.isDone) {}

WWW或WebRequest下載阻止不適用于Unity WebGL。因?yàn)閃ebGL是單線程的,并且由于JavaScript中的XMLHttpRequest類是異步的,所以除非您將控制權(quán)返回給瀏覽器,否則您的下載永遠(yuǎn)不會完成。相反,你的內(nèi)容會死鎖。相反,使用Coroutine和yield語句等待下載完成。

Using Unity Networking

Unity Networking支持通過WebSockets協(xié)議進(jìn)行通信的WebGL。請參閱Networking.NetworkManager.useWebSockets。

Using Web Sockets or WebRTC from JavaScript 使用來自JavaScript的Web套接字或WebRTC

如上所述,WebGL無法直接訪問IP套接字。但是,如果您需要超出WWW類的網(wǎng)絡(luò)功能,則可以使用Web套接字或WebRTC,這兩種瀏覽器都支持網(wǎng)絡(luò)協(xié)議。 Web套接字有更廣泛的支持,但WebRTC允許瀏覽器和不可靠連接之間的p2p連接。這些協(xié)議都沒有通過Unity中的內(nèi)置API公開,但可以使用JavaScript plugin來實(shí)現(xiàn)這一點(diǎn)。在AssetStore上可以找到在Unity WebGL中實(shí)現(xiàn)WebSocket聯(lián)網(wǎng)的插件示例。

7

Unity WebGL 中文文檔 Unity 2018.1.b
1. WebGL
2. webGL Browser Compatibility
3. Building and running a WebGL project
4. WebGL: Deploying compressed builds
5. Debugging and trouble shooting WebGL builds
6. WebGL Graphics
7. WebGL Networking
8. Using Audio In WebGL
9. WebGL performance considerations
10. WebGL: Interacting with browser scripting
11. Using WebGL Templates
12. Cursor locking and full-screen mode in WebGL
13. Input in WebGL

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 構(gòu)建和運(yùn)行WebGL項(xiàng)目 當(dāng)您構(gòu)建(buil)WebGL項(xiàng)目時(shí),Unity將創(chuàng)建一個包含以下文件的文件夾: 一個i...
    tackor閱讀 4,517評論 0 2
  • ??2005 年,Jesse James Garrett 發(fā)表了一篇在線文章,題為“Ajax: A new App...
    霜天曉閱讀 942評論 0 1
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,537評論 19 139
  • 【轉(zhuǎn)載】CSDN - 張林blog http://blog.csdn.net/XIAOZHUXMEN/articl...
    竿牘閱讀 3,587評論 1 14
  • 坐在蘭州拉面館里,浩明不好意思的說:“大哥,本該帶你吃點(diǎn)好的,可我這手頭比較緊,對不住啦?!?“沒事,吃飯本來就是...
    小杜打醋閱讀 318評論 0 0

友情鏈接更多精彩內(nèi)容