WebSocketSharp .onMessage在主线程上? /在Unity中处理?

问题描述

我发现很难找到一个简单的可靠库来在Unity中用于简单的websocket客户端。 WebSocketSharp(即https://github.com/sta/websocket-sharp)看起来不错,但许多项目无法解释。

收到邮件时,

    wssharp_connection.OnMessage += (sender,e) =>
    {
        if (!e.IsText) { return; }
        Debug.Log(">> OnMessage," + e.Data);
        Handle(e.Data);
        // but wait,not the main Unity thread??
    };

   void Handle(string msg)
   {
   .. your conventional Unity call,in a monobehavior
   }

测试表明它似乎到达了(总是?有时是?)而不是Unity主线程。

有人知道吗

  1. 实际上它始终不是主线程,还是可以变化?

  2. 如果总是另一个线程,实际上它总是一个线程,或者它是否变化/很多?

由于每个使用websocket客户端的Unity应用程序都必须执行此操作,所以令我感到惊讶的是,关于如何处理传入消息(包括在WebSocketSharp页面上),没有上百个讨论,

但是,这就是我要做的,就像您在基于框架的引擎(如Unity)中处理“线程”的通常方式一样:

    wssharp_connection.OnMessage += (sender,e) =>
    {
        if (!e.IsText) { return; }
        incoming_messages.Enqueue(e.Data);
    };

// and ...

ConcurrentQueue<string> incoming_messages = new ConcurrentQueue<string>();
void Update()
{
    if (incoming_messages.TryDequeue(out var message))
    {
        Handle(message);
    }
}

那么

  1. 确实是在Unity内部使用时处理WebSocketSharp中线程问题的常用方法吗?

鉴于websockets客户端有多少亿个Unity应用,这必定是一条颇为人知的道路。

更新的库...

BTW经过广泛调查,如果需要使用websocket客户端,则对于一个统一的应用程序而言,更现代的库https://github.com/Marfusios/websocket-client似乎更可靠/受支持

解决方法

我在手机游戏中开发了一些非常大的游戏,我们使用Best HTTP来完成游戏,它绝对很棒-如果这是工作的话,那么您所获得的高质量功能就值得100%的价格。

实际上,我什至聘请了负责制作插件的人,以确保我们在库的某些部分没有任何错误,我什至亲自检查了他的代码,这是我最高的体系结构标准之一在资产商店中见过。 (顺便说一句,我们在所检查的代码的所有部分中都没有发现一个错误或内存泄漏)

关于使用队列并在Unity主线程上取队列;那绝对是100%正确的解决方法。我不确定您所指的插件中的具体实现;但是我非常有信心他们会为TCP连接打开一个线程。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...