广告监测中的c2s/s2s,点击同步/异步监测

在 ADX 中,监测上报以上报源区分为两种,c2s 和 s2s 。

C2S(Client to Server):由用户端(APP)上报给第三方监测平台的服务器

S2S(server to server):由用户端(APP)回传给媒体服务器,再由媒体服务器上报给第三方监测代理服务器。

c2s 为端上报,数据在终端上产出,直接发送给 DSP 侧,进行相关归因处理。

s2s 为服务端上报,数据由终端生产后,将回传至平台服务端。由平台服务端进行拆解/归类后,以宏定义的方式上报给 DSP 侧。
两者由于链路不同,也造就了各自的应用场景。

c2s 携带大量的设备信息、更真实、时效更高,但格式为原生数据,需 DSP 具备一定的数据分析/处理/挖掘能力。
s2s 只包含 DSP 指定字段、数据格式可定制化、且更直观,但由于数据链路长,数据效果存在细微损耗/误差。

点击监测方式:同步监测/异步监测

**同步监测:**用户点击广告后,用户先访问监测链接,跳至监测平台服务器,再跳至落地页。
**异步监测:**点击广告后,直接跳转至落地页,媒体服务器发送监测请求给监测平台服务器。

简单来说,把监测代码和落地页链接合在一起的方式是同步监测,把监测代码单独放在第三方监测栏是异步监测。

理解以上基础概念后,来看看监测市场的现状:

AdMaster、秒针、Nielsen等品牌广告主用得比较多的第三方监测平台,为了更准确地监测和辨别流量真实性,一般只支持C2S的监测方式。而媒体有时出于对自己数据的保护,会不支持C2S的监测方式。

在处理与 `sprotoGen`、`sproto` 以及 `c2s.spb` 相关的问题时,通常涉及 **sproto 协议的编解码文件生成使用方法**。以下是对这些概念的详细说明及使用方式。 ### sproto 简介 `sproto` 是一个轻量级的二进制协议序列化库,类似于 Google 的 Protocol Buffers,但设计更为简洁高效,适用于网络通信中数据结构的定义序列化[^1]。它支持多种语言,包括 Lua C,常用于游戏开发或高性能通信场景。 ### `.spb` 文件的作用 `.spb` 文件是 sproto 编译器根据 `.sp`(sproto 定义文件)生成的二进制描述文件,包含数据结构的元信息,供运行时解析使用。例如,`c2s.spb` 可能表示客户端到服务器的协议定义文件。 ### sprotoGen 工具的使用 `sprotoGen` 是一个用于生成 sproto 编解码代码的工具,通常需要提供 `.sp` 文件作为输入,并根据目标语言生成相应的代码。以下是其基本使用流程: 1. **定义 `.sp` 文件** 创建一个协议定义文件,如 `c2s.sp`,内容如下: ```sproto .Person { name 0 : string age 1 : integer email 2 : string } ``` 2. **生成 `.spb` 文件** 使用 `sprotoc` 编译器将 `.sp` 文件编译为 `.spb` 文件: ```bash sprotoc c2s.sp -o c2s.spb ``` 3. **生成编解码代码** 使用 `sprotoGen` 生成对应语言的编解码代码,以 Lua 为例: ```bash sprotoGen --lang=lua --input=c2s.spb --output=generated/ ``` 这将在 `generated/` 目录下生成对应的 Lua 模块,可用于序列化反序列化操作。 4. **在项目中使用生成的代码** 在 Lua 中加载并使用生成的模块: ```lua local sproto = require "sproto" local proto = require "generated.c2s" local sp = sproto.new(proto) local encode_data = sp:encode("Person", { name = "Alice", age = 30, email = "alice@example.com" }) local decode_data = sp:decode("Person", encode_data) print(decode_data.name) -- 输出 Alice ``` ### 示例:C 语言中的使用 如果目标语言是 C,则可以通过以下步骤: 1. **生成 C 结构体头文件** ```bash sprotoGen --lang=c --input=c2s.spb --output=generated/ ``` 2. **在 C 代码中使用** ```c #include "c2s.h" int main() { Person person = { .name = "Bob", .age = 25, .email = "bob@example.com" }; uint8_t buffer[128]; size_t len = person_encode(&person, buffer, sizeof(buffer)); Person decoded; person_decode(&decoded, buffer, len); printf("Name: %s\n", decoded.name); return 0; } ``` ### 注意事项 - 确保 `.sp` 文件的语法正确,避免编译失败。 - `.spb` 文件应被正确加载到运行环境中,以便进行动态解析。 - 不同语言的绑定可能需要不同的编译选项或依赖库。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值