【Unity】Kafka、Mqtt、Wesocket通信

我爱普洱茶  金牌会员 | 2024-8-7 14:23:50 | 来自手机 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 517|帖子 517|积分 1551

1 前言

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

        先说结果:Window平台成功。
方法一:
        我会使用的方法是在VS里安装了Confluent.Kafka和librdkafka.redist包,然后实现了相干方法,但发现在Unity中是缺少对包中内容的引用的。

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

        但运行后仍旧有问题,在消费者实行消费方法时直接无法获取消息,不停壅闭,目前缘故起因不知。与后端的地址什么的都正确,但就是不停壅闭,也不知道是包的缘故起因还是我与后端的缘故起因。懒得搞了就放在这里了。
        以上是第一版测试,我猜疑是没问题的,卡死是因为消费等待卡死了主线程,没消息应该是服务端没设置好的问题,以是各人可以试下。
方法二:
        首先下载Unity的NuGet插件,然后拖入到Unity中,后续借助插件安装Confluent.Kafka,安装会顺带自动的把其所依靠的librdkafka.redist安装了。但安装后还不可,会报librdkafka.redist缺少相干.dll文件,而是VS上也没有相干库能调用,须要按照方法一的流程,在VS中安装Confluent.Kafka、librdkafka.redist,之后找到librdkafka.redist的目录,把里面的.dll文件复制到unityy的librdkafka.redist目录中(目录就在项目中,本身找一找,从插件的操作面板也能看到相干路径,也可以修改的)。至此,就可以正常运行了。
        另外,我还遇到了VS报相干类在两个.dll中都存在,无法辨认的错误,但Unity是可以正常运行的,我把VS关掉重新打开就好了。
3 Mqtt

        结果:Window平台成功,WebGL平台成功。
3.1 Window

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

        然后就能正常用了。
        PS:也可以在Unity中安装NuGetForUnity插件,然后再使用此插件下载MQTTnet。
3.2 WebGL

        方法一:
        首先是用的3.1的方法,打包后就连接失败,TNND(拍桌。
        然后参考了这篇文章,Unity与JS通信,让JS去举行mqtt通信。结果是不可的,还是连接失败,修改js文件中的地址细节也不可。厥后查了半天发现了一些端倪,好像要服务器那里安装一些相干的jar包才可以。但懒得搞了,就放这了。
        不外厥后又研究了下,文章中使用的stomp.main.js吧,厥后改成使用mqtt.js成功连接上了。本质还是js与mqtt服务器通信,然后js又与unity通信。
        方法二:
        厥后又研究了下,使用Best Mqtt插件成功连接上了MQTT服务器,在WebGL平台没法直接连mqtt,这里现实上还是用Websocket去连的,不外插件都封装好了,我们直接用。
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 跋文

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

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

我爱普洱茶

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表