Unity如何连接基于Node.js的安全WebSocket?

krugob8w  于 2023-08-05  发布在  Node.js
关注(0)|答案(2)|浏览(163)

我使用Node.js创建了一个HTTPS Web服务器,并使用WebSocket创建了一个套接字服务器。
两台服务器使用相同的443端口。
对于Web客户端,我能够通过下面的代码正常连接到WebSocket服务器。

const ws = new WebSocket('wss://localhost/');
ws.onopen = () => {
  console.info(`WebSocket server and client connection`);

  ws.send('Data');
};

字符串
但是,如下所示的Unity中的WebSocket客户端代码会导致错误。

using WebSocketSharp;

...
private WebSocket _ws;

void Start()
{
  _ws = new WebSocket("wss://localhost/");
  _ws.Connect();
  _ws.OnMessage += (sender, e) =>
  {
    Debug.Log($"Received {e.Data} from server");
    Debug.Log($"Sender: {((WebSocket)sender).Url}");
  };
}

void Update()
{
  if(_ws == null)
  {
    return;
  }

  if(Input.GetKeyDown(KeyCode.Space))
  {
    _ws.Send("Hello");
  }
}


InvalidOperationException:连接的当前状态不是“打开”。
Unity客户端是否无法通过插入Self-Signed Certificate (SSC)来配置HTTPS进行连接?
如果更改为HTTP并将端口号设置为80,则确认Unity客户端也正常连接。
如果是SSL问题,如何修复代码以启用通信?

iklwldmw

iklwldmw1#

我找到了解决上述问题的方法。
下面的代码执行从Unity client连接到Web服务器内部的WebSocket服务器的过程。

client.cs

using UnityEngine;
using WebSocketSharp;

public class client : MonoBehaviour
{
     private WebSocket _ws;
     
     private void Start()
     {
          _ws = new WebSocket("wss://localhost/");
          _ws.SslConfiguration.EnabledSslProtocols = System.Security.Authentication.SslProtocols.Tls12;
          
          Debug.Log("Initial State : " + _ws.ReadyState);

          _ws.Connect();
          _ws.OnMessage += (sender, e) =>
          {
               Debug.Log($"Received {e.Data} from " + ((WebSocket)sender).Url + "");
          };
     }

     private void Update()
     {
         if(_ws == null) 
         {
              return;
         }

         if(Input.GetKeyDown(KeyCode.Space))
         {
              _ws.Send("Unity data");
         }
     }
}

字符串

pqwbnv8z

pqwbnv8z2#

是不是有必要把一些证书在客户端。我以为SSL需要这样做?

相关问题