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

Posted

技术标签:

【中文标题】Unity 如何连接基于 Node.js 的 Secure WebSocket?【英文标题】:How can Unity connect with Secure WebSocket based on Node.js? 【发布时间】:2021-07-06 09:40:00 【问题描述】:

我使用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:连接的当前状态不是 Open。​​

Unity客户端是否无法通过插入Self-Signed Certificate (SSC)来配置HTTPS进行连接?

如果更改为HTTP,并将端口号设置为80,则确认Unity客户端也正常连接。

如果是SSL 问题,如何修复代码以启用通信?

【问题讨论】:

【参考方案1】:

我找到了解决上述问题的方法。

下面的代码执行从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");
         
     

【讨论】:

以上是关于Unity 如何连接基于 Node.js 的 Secure WebSocket?的主要内容,如果未能解决你的问题,请参考以下文章

验证 WebSocket 连接

从 C# 程序连接基于 node.js 的 socket.io WebSocket 服务器

基于 Koa平台Node.js开发的KoaHub.js连接打印机的代码

在 node.js 中管理基于命令的 TCP 套接字 API 上的连接

基于node.js搭建简单的MQTT服务器,手机通过热点连接电脑实现MQTT服务器测试

Java SE官方团队成员为何“抛弃”Java,成了JavaScript和Node死忠?