在浏览器采用 netcode.io 之前,该存储库允许通过浏览器扩展使用 netcode.io。 netcode.io 支持在 Web 浏览器中安全使用 UDP,以支持多人 HTML5 游戏。有关 netcode.io 的更多信息可以在此处找到。
以下浏览器通过扩展支持 netcode.io:
在浏览器本地出现 netcode.io 支持之前,移动设备支持基本上是不可能的,因为移动平台不支持扩展或本地消息传递。
为此,需要安装浏览器扩展和执行实际 netcode.io 通信的本机应用程序帮助程序。该扩展使用浏览器中提供的本机消息传递 API,以便通过帮助程序使 netcode.io 可用。
要在浏览器中尝试此操作,请首先构建 netcode.io.host 帮助程序:
go get github.com/wirepair/netcode
go build
- 针对当前操作系统env GOOS=windows GOARCH=amd64 go build
- 为 Windows 构建(linux 风格设置环境变量)env GOOS=linux GOARCH=amd64 go build
- 为 Linux 构建(linux 风格设置环境变量)env GOOS=darwin GOARCH=amd64 go build
- 为 Mac 构建(linux 风格设置环境变量) ./netcode.io.host
这应该运行没有错误,并将其自身安装为本机消息传递扩展。
完成此操作后,将browserwebext
目录添加为解压的扩展程序。
该 API 以window.netcode
的形式提供给 Javascript 客户端。您可以使用传统的if (window.netcode) { ... }
模式检查 netcode.io 的可用性。
window.netcode
提供了一个函数: createClient(callback)
:
创建一个新的 netcode.io 客户端,可用于使用 netcode.io 协议进行安全 UDP 通信。回调的形式为callback(err, client)
。如果设置了err
,则创建客户端时出错( client
将为空)。否则client
被设置且err
为 null。返回的客户端是Client
的实例。
protocol
应该是ipv4
或ipv6
,并确定您可以连接到的服务器地址类型。
参数:
protocol
: ipv4
或ipv6
。callback
: callback(err, client)
形式的回调,其中err
为null
或Error
的实例, client
为null
或Client
的实例。检查用户是否已安装 netcode.io 帮助程序。回调的形式为callback(err, isPresent)
,其中err
为null
或Error
的实例。如果没有错误, isPresent
是一个布尔值,指示是否已安装本机帮助程序。
如果尚未安装 netcode.io 帮助程序,您应引导用户访问 https://github.com/RedpointGames/netcode.io-browser/releases/tag/latest,在其中可以轻松地将 netcode.io 帮助程序安装在点击几下。
参数:
callback
: callback(err, isPresent)
形式的回调,其中err
为null
或Error
的实例, isPresent
为null
或布尔值。设置 netcode.io 客户端的滴答率,表示为每秒接收和发送数据包的滴答数。客户的价格变动率默认为60
;即每秒 60 次。
参数:
tickRate
:等于或大于1
整数。callback
: callback(err)
形式的回调,其中err
为null
或Error
的实例。使用指定的令牌连接到 netcode.io 服务器。该token
应该是Uint8Array
的实例,并表示从身份验证服务器接收到的 netcode.io 令牌。
您不能使用 netcode.io 向任意 IP 地址发送 UDP 数据包;相反,您必须拥有一个使用 netcode.io 库(或兼容的实现)的身份验证服务器,该服务器可以使用游戏服务器 IP 地址列表以及身份验证服务器和游戏服务器之间共享的私钥生成和签署令牌。
在大多数常见情况下,您的身份验证服务器将提供令牌作为 AJAX 请求的一部分。如果您使用用户帐户系统,您将在用户登录游戏后提供令牌,该令牌指示客户端有权连接到哪个服务器。
参数:
token
:包含令牌数据的Uint8Array
实例。callback
: callback(err)
形式的回调,其中err
为null
或Error
的实例。以packetBuffer
作为数据向连接的服务器发送数据包。 packetBuffer
应该是Uint8Array
的实例。
参数:
token
:一个Uint8Array
实例,其中包含要发送的数据包数据。callback
: callback(err)
形式的回调,其中err
为null
或Error
的实例。以字符串形式返回客户端的当前状态。返回的状态是以下之一: connected
、 connectionDenied
、 connectionRequestTimeout
、 connectionResponseTimeout
、 connectionTimedOut
、 connectTokenExpired
、 disconnected
、 invalidConnectToken
、 sendingConnectionRequest
、 sendingConnectionResponse
或destroyed
。
参数:
callback
: callback(err, state)
形式的回调,其中err
为null
或Error
的实例。 state
要么为null
(在出现错误的情况下),要么为上面列出的状态之一。销毁客户端,将其与服务器断开连接并清理所有关联的资源。一旦客户端被销毁,就无法再使用。
参数:
callback
: callback(err)
形式的回调,其中err
为null
或Error
的实例。向客户端添加事件侦听器。目前唯一支持的type
是receive
,当客户端从服务器接收到数据包时会触发该类型。
对于receive
回调的形式为callback(clientId, buffer)
,其中clientId
是身份验证服务器最初发出的客户端标识符, buffer
是作为Uint8Array
实例接收的数据包。
参数:
type
:上面列出的支持类型之一。callback
:回调的形式因type
而异。 此主机扩展代码是根据 MIT 许可证提供的。
目前该项目的主要目标是:
所有拉取请求必须在 MIT 许可证下可用。