Firefox webgl 上的 Websocket

Posted

技术标签:

【中文标题】Firefox webgl 上的 Websocket【英文标题】:Websocket on firefox webgl 【发布时间】:2015-01-09 21:25:06 【问题描述】:

我的游戏有问题。我正在 WebGL 中使用 Unity3D 5 开发游戏。游戏使用 Web 套接字连接到服务器,其地址如下所示:

wss://serveraddress:8443/moreaddress

它使用 javascript 实现连接到服务器。 javascript看起来像这样:

var WSClient = 
    socket: null,
    url: null,

    connect: function(host) 
        if ('WebSocket' in window) 
            this.socket = new WebSocket(host);
         else if ('MozWebSocket' in window) 
            this.socket = new MozWebSocket(host);
         else 
            Console.log('Error: WebSocket is not supported by this browser.');
            return;
        

        this.socket.onopen = function()
        
            SendMessage("WebSocketManager","OnOpenWebSocket");
        ;

        this.socket.onclose = function() 
            SendMessage("WebSocketManager","OnCloseWebSocket");
        ;

        this.socket.onmessage = function(message) 
            if(typeof message == "string")
                SendMessage('WebSocketManager','OnMessageReceived', message);
            
        ;
    ,

    initialize: function(url) 
        if (typeof url !== "undefined")
            this.url = url;

        if (this.url == null) 
            Console.log('Info: Initialize without an URL');
            return;
        

        this.connect(this.url);
    ,

    sendMessage: function(msg) 
        if (msg != '') 
            this.socket.send(msg);
        
    ,

    close: function() 
        this.socket.close();
    
;

SendMessage 函数只是在 Unity 中调用函数的东西。所以基本上发生在我身上的事情是在我的游戏连接到服务器后,onOpen() 函数被调用,然后从 Unity 调用我的 OnOpenWebSocket() 函数,然后尝试向服务器发送消息以登录,服务器接收该消息并尝试向我发送答案,但我在onMessage() 函数中得到的只是这条消息:"isTrusted":true.

这发生在 Firefox 上,但在 Chrome 上运行良好。在 Chrome 上,我从我的服务器收到了正确的消息。而且服务器中没有写isTrusted的地方。

我使用的是 Firefox 33.0。和 Chrome 39.0.2171.95

我查看了firefox的about:configwebsocket是启用的。

有人知道是什么原因造成的吗?

【问题讨论】:

【参考方案1】:

我在尝试使用 websocket 时遇到了同样的问题。我将代码更改为

var ws = new WebSocket("ws://localhost:3331"); // some url
ws.onmessage = function(event) 
  console.log(event.data);

然后它在 Firefox 上运行了! onmessage 回调是 EventListener 类型,并接收 MessageEvent 作为参数,请参阅https://developer.mozilla.org/en-US/docs/Web/API/WebSocket。

【讨论】:

以上是关于Firefox webgl 上的 Websocket的主要内容,如果未能解决你的问题,请参考以下文章

检测 WebGL 支持的正确方法?

目前支持 WebGL 的浏览器

WebGL vs Three.js

如何确定活动WebGL上下文的数量?

WebGL:尽管使用相同的代码,但一切都很模糊

Autodesk Forge 上的 WebGL 上下文丢失错误