La forma en que yo lo resolveria es un archivo de texto plano guardar el ID del jugador que hizo la peticion y el que la tiene que recibir. (digamos que se llame RETO.TXT) guardado tipo json.
Cita: {
"retador": "2341",
"contrincante": "4545"
}
Teniendo esto en mente, cuando alguien reta o otro usuario esta peticion se graba en RETO.TXT -en el formato mencionado anteriormente-
En el computador de la otra persona hay un script que se ejecuta cada 5 segundos que checa este archivo RETO.TXT y comprueba si su $_SESSION["id"] esta dentro del archivo txt, y SI (if) esta en el archivo le sale un mensaje (div escondido) que dice que si acepta el reto: Aceptar o Cancelar, si hace click en aceptar lo lleva a la pagina del reto.
Puedes usar la funcion
json_encode y
json_decode para facilmente convertir y extraer los datos del documento RETO.TXT
Igualmente tienes que hacer un pequeño script que borre el archivo si ya lleva mas de 10 minutos desde la fecha de creacion; y si quieres que se puedan múltiples peticiones puedes hacer una colección de archivos, If(yaexiste(RETO1.TXT)){create(RETO2.txt)}
Intentalo hacer y si te trabas en alguna parte del proceso nos comentas, suerte.