socket.io v2客户端连v3/v4服务器

一般在客户端非浏览器环境/node.js等会遇到这样的情况,需要socket.io v2客户端(常见于Unity中的BestHTTP)连v3/v4服务器。但是由于v3的断代性变化,导致连不上。

先说结论:v2版客户端连接v3/v4服务器不需要客户端做什么,仅需服务端开启allowEIO3: true选项。但用BestHTTP的情况又不一样。

BestHTTP连socket.io服务器

BestHTTP v1中的socket.io v2客户端连v3/v4服务器一般会出现如下错误(Unity Editor中):

Ex [PollingTransport]: ParseResponse - Message: 1: Index and count must refer to a location within the buffer.
Parameter name: bytes   at System.Text.UTF8Encoding.GetString (System.Byte[] bytes, System.Int32 index, System.Int32 count) [0x00057] in <695d1cc93cca45069c528c15c9fdd749>:0 
  at BestHTTP.SocketIO.Transports.PollingTransport.ParseResponse (BestHTTP.HTTPResponse resp) [0x000e5]

解决方案:

(1)客户端采用BestHTTP v1,用其中的socket.io v2:服务端只能用socket.io v2。但由于socket.io直到v3开始才给出TypeScript的类型声明,故服务端要使用TypeScript,只能把socket.io v2的变量声明成any类型。自己搞v2的.d.ts,工作量太大,如果你搞出来了,经测试没有问题,可以考虑共享到npm @type。

(2)客户端升级BestHTTP v1到v2,但是仍然用其中的socket.io v2。服务端可以用socket.io v2/v3/v4,v3/v4要开启allowEIO3: true。

(3)客户端直接用BestHTTP v2中的socket.io v3/v4,一切OK。

我不确定是否所有BestHTTP v1都无法正常连接开启allowEIO3: true选项的socket.io v3/v4服务器,但是至少到BestHTTP v1.10.x都不能连上,尽管它们号称支持socket.io v2。

v3/v4服务器开启allowEIO3: true选项

非常简单,在require socket.io的时候按如下方法开启:

var io = require('socket.io')(http, {
    allowEIO3: true // false by default
  });

参考

Migrating from 2.x to 3.0 | Socket.IO

https://benedicht.github.io/BestHTTP-Documentation/pages/best_http2/protocols/socketio/socketio.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: Unity是一款强大的即时三维开发平台,而Socket.IO是一个能够在不同的平台和语言之间实现双向通信的库。在Unity中使用Socket.IO可以实现与服务器之间的实时通信,而版本3和版本4是Socket.IO的不同版本。 Socket.IO版本3相对于版本4来说是较老的版本,但仍然具有一些优点。首先,版本3在性能方面具有更好的表现,能够处理更多的连接并在更短的时间内传输数据。其次,版本3在使用上相对简单,开发者可以快速上手并进行开发。此外,版本3还具有稳定性较高的特点,可以确保通信的稳定性。 而版本4是Socket.IO的最新版本,相对于版本3来说有一些改进和优化。首先,版本4在可扩展性方面进行了优化,使得在处理大量连接和数据传输时更为高效。其次,版本4提供了更好的错误处理和错误消息传递机制,开发者可以更方便地进行调试和排查问题。最后,版本4还增加了一些新功能和API,提供了更多灵活性和功能扩展的可能性。 总的来说,无论是选择Socket.IO的版本3还是版本4,都可以在Unity中实现与服务器之间的实时通信。版本3相对于版本4来说更稳定、简单并具有较好的性能,适合于一些对性能要求不高或者需求简单的项目。而版本4则在可扩展性、错误处理和功能扩展方面有更大的优势,适合于一些对性能有更高要求或者对功能扩展有更大需求的项目。 ### 回答2: Unity socket.io v3v4是Unity引擎中用于处理网络通信的两个版本。 首先,Unity socket.io v3是较早期的版本,它基于socket.io库的3.x版本进行开发。该版本在Unity中提供了与服务器进行实时双向通信的能力。它使用了Socket.io的协议和API,允许开发人员通过事件驱动的模式进行实时通信。这个版本具有一些基本的功能,比如连接到服务器、发送和接收消息、处理事件等。但是,它的开发和维护活动相对较少,可能存在一些Bug和缺陷。 而Unity socket.io v4是对v3版本的改进和更新。它基于socket.io库的4.x版本,并且在性能和功能方面进行了一些优化。这个版本支持更多的平台和协议,提供了更稳定和高效的网络通信体验。与v3相比,v4通过更智能的网络连接管理、更高效的数据传输和更稳定的事件处理等方面进行了改进。此外,v4版本的Unity socket.io还更加易于使用和集成到现有项目中。 总的来说,Unity socket.io v4是一个较新的版本,具有许多改进和更新。它在性能、稳定性和功能方面都更加出色,因此在开发Unity中的网络通信功能时更值得推荐使用。 ### 回答3: Unity Socket.IO 是 Unity 的一个插件,用于实现基于 Socket.IO 协议的网络通信。v3v4Socket.IO 的两个版本,有一些区别。 首先,v3Socket.IO 的旧版本,而 v4 是较新的版本。v4 带来了一些新特性和改进,并修复了一些 bug。在性能和稳定性方面,v4 相对于 v3 有一些优化。 其次,v4 改变了一些 API 的使用方式。在 v4 中,你需要使用新的方法和事件来处理连接、发送和接收消息等操作。这可能需要开发者更新他们的代码和适应新的语法。 另外,v4 还引入了一些新的功能,比如支持自定义传输协议、多个命名空间以及在客户端服务器之间进行二进制数据传输等。这些新特性可以帮助开发者更灵活地处理不同的网络场景。 总的来说,如果你是新的项目或者准备升级你的项目,建议选择 v4 版本。它具有更好的性能和稳定性,并且支持更多的功能。然而,如果你目前正在使用 v3,并且项目运行正常,没有遇到性能或功能问题,那么没有必要立即升级到 v4

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值