跳到主要内容

Android默认WebSocket实时图源

Android独立宿主默认支持HTTP(S)与WS/WSS,无需为普通实时图源另写Transport。地图核心内置QuickJS,脚本语法和网页/桌面相同;UI和系统网络配置由应用处理。

import {map} from 'sqsmap';
export const sessionMode='persistent';
map.addSource('live',{type:'geojson',
  data:{type:'FeatureCollection',features:[]},
  sqsLive:{fields:{n:'number'},allowDelta:true}});
map.addLayer({id:'live-points',type:'circle',source:'live',
  paint:{'circle-radius':12,'circle-color':'red'}});
await map.sqs.flush();
const source=await map.getSource('live');
const receiver=await source.sqs.connectLive({transport:{
  type:'websocket',url:'wss://your-server.example/live',reconnectDelayMs:2000}});
map.on('sourcedata',event=>{if(event.sourceId==='live')console.log(event.sqsLive);});
export default {receiver};

服务端发送gis-live-v1文本snapshot/delta;每帧遵守当前图源字段、epoch和十进制128位sequence规则。连接失败由核心按reconnectDelayMs重连,暂停/恢复/停止与场景归属沿用实时接收器。不是任意二进制消息或通用双向Socket接口。

默认接收器有两条并发流,独立于HTTP的四个工作线程;接收缓冲预留共64MiB,每条消息受核心maxBytes限制、最多16MiB。逐帧等待Owner完成形成反压,复制回传另有共同预算。握手最长8秒、头部16KiB;支持文本分片、ping/pong/close、客户端控制帧掩码和严格UTF8/长度检查。

WSS使用平台默认信任链和HTTPS端点识别,拒绝不受信证书和错误主机名。取消关闭已登记TCP/TLS连接并释放预算;DNS由系统解析,其结束可能取决于系统解析器超时。Android明文网络策略和系统信任配置仍由应用设置。

不支持扩展/压缩、二进制、自定义请求头/子协议、代理设置或Cookie/用户凭据自动传递。需要这些能力时提供应用自己的Transport。API24源码和ARM64JNI编译、真实本地WS/WSS及LinuxJVM/脚本/软件GPU36项通过;手机系统与GPU仍需设备验收。

协议依据RFC6455,TLS端点识别使用Android SSLParameters。实现独立编写,无新增生产依赖。