主动断开: 客户端主动调用 disconnect 接口, 自己知道
被动断开: status=disconnect, last-error = 0
原因: 另一方主动断开, 立即知道
超时断开: status=disconnect, last-error = 501
原因: timeout1 参数时间内没有收到对方协议指令
空闲断开: status=disconnect, last-error = 502
原因: timeout2 参数时间内没有收到对方协议指令
status =disconnect, 错误代码=501
获得客户端自己的last-time (getInt (“last-time”, -2)), 该客户端最后收到服务器协议指令的时间(多少毫秒之前)
如果该时间在较短时间内(例如小于2000ms), 基本可以推断不是当前客户端的网络原因导致中断
status=connected,可以认为网络正常(可以配合客户端 last-time判断)
如果玩家频繁在网络正常时退到后台(onPause), 可以识别为恶意退出(可以结合玩家比分)
1对1 联网时, 有些竞争的资源将由其中一台机器来裁决(主机)
同样一个事件, 主机和客户端如果几乎同时发生, 由于网络延迟的原因, 看起来主机发生更早, 导致主机有 "主场优势"
可以用延迟来修正, 主机发生的竞争性事件, 加上当时的延迟时间 ( getInt ("latency")/2 ), 延迟发生
自动选择分区服务器:
客户端自动测试与分区服务器之间的网络延迟, 选择延迟最低的作为分区服务器
指定分区服务器:
config (“server-id”, “分区服务器id”)
分区服务器可以通过 getString (“server-id”) 获得
带宽/流量是实时对战的主要成本, 在确保游戏正常进行的情况下, 发送频率越低, 数据长度越小越有利
例如, 每秒发送30次以下(可以设法优化到10次/秒), 每次数据发送100字节以内
同个瞬间(2ms内)多次 send 会做合并优化, 减少数据包数量
每秒发送量越低越好(实际发送量最好在4K以内, 2K 更好), 传输越少, 网络越稳定, 并且除了带宽流量成本考虑, 还可以更容易集成 Nanolink 的回放与实时观战特性
config ("room-atime", "1")
服务器可以设置房间的入场时间和最大人数, 当没有达到入场时间和最大人数时, 玩家可以加入该房间。
有时游戏需要实现玩家点击 "开始" 按钮 开始游戏战斗, 不再允许新玩家进入, 可以通过: config ("room-atime", "1") 来关闭入场
建议 config ("room-atime", "1") 在客户端主机调用
config ("room-players", "0")
服务器可以设置最大战斗时间, 到时会自动解散, 或者房间长时间没有收到客户端的数据指令, 也会自动解散。
如果游戏已经完成, 可以直接调用 config ("room-players", "0") 通知所有人断开连接。
getInt ("uptime") 可以获得房间已经开始多少时间, 单位毫秒。
getInt ("players") 获得房间的玩家连接数量(有的玩家可能已经离开)。
getInt ("players", timeout) 获得在线玩家数量, 根据 timeout 参数判断在线还是离线。
例如: getInt ("players", 5000) 将获得 5000ms 内有发送数据指令的玩家数量, 可以用于作为在线玩家数量。
注意, getInt ("players", 5000) 这种方式是通过玩家的最后发送数据时间判断, 所以需要确保玩家在这个时间内有数据发送, 如果没有数据需要发送, 可以构造一个空指令。
Nanolink SDK 支持区域广播, 通过 send 配合 update 接口可以实现区域广播。
可以支持2-64人, 如果需要支持更多人请联系我们。
Nanolink 对2个人(1对1模式)进行特殊优化, 强烈建议 用 init (appKey, 2) 这种形式初始化。
人数超过2人, 用 init (appKey, 3) 这种形式初始化。
当人数在 12人内(最大不超过16人)的时候, 用全局广播方式。
大地图, 且人数超过16人以上时, 建议用区域广播方式, 节约流量。
DllNotFoundException: nanolink
// 类似报错
DllNotFoundException: nanolink
Nanolink.NanoClient.getString (System.String name) (at Assets/Plugins/Nanolink/NanoClient.cs:73)
Nanolink.NanoClient.getStatus () (at Assets/Plugins/Nanolink/NanoClient.cs:87)
解决:
在Unity编辑器检查 /Plugins/Nanolink/Windows 下 nanolink.dll 和 pthreadVC2.dll 两个文件的平台是否勾选,如图:
流量: 1 RMB/G
并发: 1 RMB/天/100用户(超过100并发)
流量使用到一定阶段有相应折扣。初始用户并发用户费用可以免除。
价格 | 流量 | 赠送 |
---|---|---|
1 RMB/G | 1000G以内 | 100并发 |
0.8 RMB/G | 1000G - 100000G | 1000并发 |
0.75 RMB/G | 100000G以上 | 1000并发 |