A WebSocket ping frame may or may not contain application data in addition to the opcode identifying it as a ping frame.
As far as I understand, the purpose of ping/pong is to prevent the TCP connection from timing out. The frames contain dummy data (i.e. opcodes), as small as possible, sent as frequently as necessary to show that the connection is still being used.
Is there more to it? Would I be missing out on anything if I never sent application data in ping frames? Would I be abusing ping/pong if, for example, I sent tokens in pings in order to establish correspondence between pings and pongs to judge the connection quality by the time between sending a ping and receiving the corresponding pong?