【Unity】Kafka、Mqtt、Wesocket通信

1 前言

        最近研究了下kafka、mqtt、webocket插件在Unity网络通信中的应用,做下小总结吧。(不想写笔记,但不写又会忘,痛苦)

2 Kafka

        先说结果:Kafka实现失败。

        我会使用的方法是在VS里安装了Confluent.Kafka和librdkafka.redist包,然后实现了相关方法,但发现在Unity中是缺少对包中内容的引用的。

         在VS解决方案的引用中,找到引用这两个包的.dll其所处位置,然后复制到Unity的Assets/Plugins文件夹中,Unity便可以识别了,但运行时依旧会报缺失引用的错误,后来将librdkafka.redist的的.dll文件(好几个)的Inspector面板中的Load on startup属性勾选后便解决了此问题。

        但运行后依旧有问题,在消费者执行消费方法时直接无法获取消息,一直阻塞,目前原因不知。与后端的地址什么的都正确,但就是一直阻塞,也不知道是包的原因还是我与后端的原因。懒得搞了就放在这里了。

3 Mqtt

        结果:Window平台成功,WebGL平台失败。

3.1 Window

        和上面Kafka一样,先在VS下载相关包,再把相关.dll文件复制到Unity的Assets/Plugins目录下。

        然后就能正常用了。

3.2 WebGL

        首先是用的3.1的方法,打包后就连接失败,TNND(拍桌。

        然后参考了这篇文章,Unity与JS通信,让JS去进行mqtt通信。结果是不行的,还是连接失败,修改js文件中的地址细节也不行。后来查了半天发现了一些端倪,似乎要服务器那边安装一些相关的jar包才可以。但懒得搞了,就放这了。

4 Websocket插件

        结果:Window、WebGL平台成功。

        Window没啥说的,安装后就能用,只说WebGL的情况。两个插件:BestHttp、NativeWebSocket。

4.1 BestHttp

        网上都在说这插件好厉害,但其因版本造成的问题也很厉害。我用的是Unity2022.3.0,首先找个一个v2.0.5版本的插件,然后运行报错。寻找了相关解决方案:地址,发现没用。那应该就是版本问题了,更换了一个v3.11.0版本,运行依旧报错,按上面的解决方案再次调整,运行成功。总之,换了高版本,并添加了一些内容才成功运行,但你以为到这里就结束了吗?

        运行是成功,但运行时发现绑定的监听函数,如OnMessage这些全都执行报错。在运行WebGL打包项目时,在Web端按F12就可以从控制台看到相关报错信息了。最后在这里找到了解决方案:地址。

        根据其所说,是有些方法不支持的原因,按照图中所示进行替换即可将。我们可以在打包文件的Build目录下找到 项目名.framework.js 文件(同目录还有个 项目名.loader.js,报错代码基本就在这两个文件里,根据报错内容在这两个文件里找,我是在framework那个文件中找到了。),在里进行替换,直接Ctrl+F搜索找,所有Runtime.dynCall(xxxxx)都要替换,但修改此文件只能解一时的问题,以后每次打包就要重新修改,所以我们也可以在编辑器项目中修改。具体为“导入的插件文件夹/Plugins/WebGL/”下的BestHTTP_WebSocket.jslib文件(同样的,同目录也有其他文件,如果报错内容是在其他文件内,则应修改其他文件,通常需要自己打开文件然后Ctrl+F自己去搜索报错内容是否在此文件内。),对文件中的函数进行替换,然后重新打包即可。运行成功,函数执行成功,可喜可贺。

        另外,我这边还报了一个转String函数过时的错误,并告诉了我应该改用什么函数,与上面同理,找到原函数进行替换即可。

4.2 NativeWebSocket

        插件:地址。

        在Unity包管理那里输入网页里提供的URL就可以下载了,下载完,实例代码一粘,一运行,WebGL成功通信。真好。

5 后记

        这可是我端午假期加班写的笔记,给我满怀感恩之情好好看啊。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/690421.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

python -- series和 DataFrame增删改数据

学习目标 知道df添加新列的操作 知道insert函数插入列数据 知道drop函数删除df的行或列数据 知道drop_duplicates函数对df或series进行数据去重 知道unique函数对series进行数据去重 知道apply函数的使用方法 1 DataFrame添加列 注意:本文用到的数据集在文章顶部 1.1 直…

Java采取擦除式泛型到底兼容了什么场景?

在开始前刚好我有一些资料,是我根据网友给的问题精心整理了一份「 Java的资料从专业入门到高级教程」, 点个关注在评论区回复“888”之后私信回复“888”,全部无偿共享给大家!!!Java擦除式泛型是一个妥协,…

数据+AI 打造企业的“金山银山”

今日之世界,数据是生产资料,而人工智能(AI)是生产工具,它们的结合,带来的是业务的增长、新质生产力的提升,就是金山银山。 创新是源动力 凡是到过浙江省安吉县余村的人,应该都会被它…

2024年AI大模型训练数据白皮书作用

2024年AI大模型训练数据白皮书 在人工智能迅猛发展的今天,AI大模型的训练数据质量和管理成为影响其性能和应用效果的关键因素。《2024年AI大模型训练数据白皮书》为业内人士提供了一份详尽的指南,揭示了当前AI大模型训练数据的最新趋势、最佳实践以及未…

Steam游戏如何选择适合的服务器

在Steam平台上,玩家可以享受到来自世界各地开发者的游戏作品。然而,要获得最佳的游戏体验,选择合适的服务器至关重要。本文将从网络延迟、服务器位置、游戏类型和个人偏好等多个方面,为玩家提供选择Steam游戏服务器的实用指南。 如…

【核心动画-转场动画-CATransition Objective-C语言】

一、转场动画,CATransition, 1.接下来,我们来说这个转场动画啊,效果呢,会做这么一个小例子, 感觉有一个3D的一个样式一样, 转场动画呢,就是说,你在同一个View,比如说,imageView,去切换图片的时候,你可以去用这个,转场动画, 实际上,包括,控制器之间的切换,也…

【Flask开发实战】首页模板

一、前言 前面我们已经完成登录页面的设定,登录后临时调转到“hello flask”的界面。现在我们根据实际首页的设计需要,来完成首页相关内容的开发。一般系统首页会放一些分析数据,多以图表的方式展示,方便使用者了解信息。以防火墙…

【Vscode配置java环境并配置stringboot】

1.VSCODE配置JAVA环境 参考这篇文章配置JAVA环境:连接 java版本,我是win11系统,我下载的JAVA安装版本是下面,是最新版的: 配置环境:步骤很简单,就是向系统环境变量中添加路径,参考上面文章中的…

类和对象(二)(C++)

初始化列表 class Date{public:Date(int year, int month, int day){_year year;_month month;_day day;}private:int _year;int _month;int _day;}; 虽然上述构造函数调用之后,对象中已经有了一个初始值,但是不能将其称为对对象中成员变量的初始化…

PCL 生成空间椭圆点云

目录 一、算法原理二、代码实现三、结果展示本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫。 一、算法原理 设椭圆在 X O Y XOY XOY平面上,参数方程为:

Python 机器学习 基础 之 【实战案例】轮船人员获救预测实战

Python 机器学习 基础 之 【实战案例】轮船人员获救预测实战 目录 Python 机器学习 基础 之 【实战案例】轮船人员获救预测实战 一、简单介绍 二、轮船人员获救预测实战 三、数据处理 1、导入数据 2、对缺失数据的列进行填充 3、属性转换,把某些列的字符串值…

炫技来了!使用SDR设备成功抓到蓝牙air packet, 并且wireshark实时解析, 没错就是蓝牙空口抓包器

本文章主要介绍是用ZYNQ7020AD9361Gnu radio是搭建一个蓝牙抓包器的文章。 由于之前一直做蓝牙Host,对controller觉得是一个比较虚无缥缈的东西,得不到的总是在骚动,所以最近用我用吃灰了2年的SDR(Software Defined Radio)设备研…

警务反诈RPA:利用机器人流程自动化技术打击诈骗行为

信息时代,网络技术快速发展,在丰富生活的同时,也带来了持续高发的电信网络诈骗问题,对社会造成了严重威胁。面对海量的数据信息,传统数据融合技术的瓶颈不断显现,无法满足风险防控、打击诈骗的效率要求&…

【刷题篇】分治-归并排序

文章目录 1、排序数组2、交易逆序对的总数3、计算右侧小于当前元素的个数4、翻转对 1、排序数组 给你一个整数数组 nums&#xff0c;请你将该数组升序排列。 class Solution { public:vector<int> tmp;void mergeSort(vector<int>& nums,int left,int right){…

【漏洞复现】多客圈子论坛系统 httpGet 任意文件读取漏洞

0x01 产品简介 多客圈子论坛系统是一种面向特定人群或特定话题的社交网络&#xff0c;它提供了用户之间交流、分享、讨论的平台。在这个系统中&#xff0c;用户可以创建、加入不同的圈子&#xff0c;圈子可以是基于兴趣、地域、职业等不同主题的。用户可以在圈子中发帖、评论、…

TensorRT 精度debug分析工具

tensorRT还提供了一套可用于engine生成过程中debug的工具&#xff0c;包括Polygraphy、ONNX GraphSurgeon和PyTorch-Quantization。这些小工具用处很大&#xff0c;值得花时间进一步研究。 Debug方法示例 polygraphy Polygraphy是TensorRT官方提供的一系列小工具合集&#x…

非递归实现组合型枚举、费解的开关(贪心)

非递归实现组合型枚举 题目描述 登录—专业IT笔试面试备考平台_牛客网 运行代码 #include <iostream> #include <vector> using namespace std; void FN(int n, int m, vector<int>& s, int start) {if (s.size() m) {for (int num : s) {cout <&…

SM481,SM432和利时DCS备件

SM481,SM432和利时DCS备件。POU名只能包含字母、数字、下划线&#xff0c;第一个字符必须是字母或者下划线&#xff0c;且遵循以下原则&#xff1a;SM481,SM432和利时DCS备件。关于重名&#xff0c;不能与变量名、变量组名、POU文件夹名、任务名、SM481,SM432和利时DCS备件。工…

算法类学习笔记 —— 典型卷积神经网络

文章目录 介绍LetNet填充&步长&通道数填充步长通道数卷积层池化层全连接层激活函数常见的激活函数Sigmoid函数tanh函数ReLU激活函数LReLUPReLUSwish softmax分类 AlexNetVGGNetGoogleNetResNetDenseNetSENet 介绍 现有的卷积神经网络的结构可以按照下图机型分类&#x…

项目3:从0开始的RPC框架(扩展版)

一. 全局配置加载 1. 需求分析 通常情况下&#xff0c;在RPC框架运行的会涉及到多种配置信息&#xff0c;比如注册中心的地址、序列化方式、网络服务端接口号等。 在简易版框架中&#xff0c;硬编码了这些配置&#xff0c;也就是都写死了&#xff0c;在真实的应用环境中是不…