Vous pouvez retrouver toute l'information sur les qualifications dans les documents à cette adresse.
- Épreuve pratique: Document avec les instructions pour le défi pratique
- Liste de tâches: Tableurs avec la liste des tâches à effectuer pour chaque partie du défi
Le serveur requiert Python 2.7.
Il est possible de l'exécuter directement avec python2 server.py
ou ./server.py
. Le serveur écoute pour les connexions sur le port 31337.
Le serveur contient un petit serveur WebSocket intégré qui supporte plus ou moins le RFC pour les WebSocket. Pour le défi, il ne devrait pas y avoir de problème, mais si votre navigateur web essaie de trop en demander (Fragmentation, keep-alive à partir de ping), vous risquez d'avoir des problèmes de communication. Dans le cas où vous éprouvez des problèmes de communication, il est possible d'utiliser un proxy WebSocket vers TCP avec Websockify. Lisez la section suivante pour plus d'information.
Voilà un exemple de code qui devrait fonctionner sur la plupart des navigateurs récents et qui permet de communiquer avec le serveur de chat:
c = new WebSocket('ws://localhost:31338')
c.onmessage = function(msg){
// Handle received messages
console.log(msg);
}
c.onopen = function(){
c.send("[dst=server]auth bob bob")
}
Il est possible d'exécuter le serveur et d'accepter les connexions WebSocket à l'aide de Websockify.
La plupart des distributions Linux ont un paquet websockify
dans leur répertoire de paquet. Si vous êtes sous Windows, c'est peut-être le temps de penser à garder une machine Linux pas trop loin.
Websockify peut être démarré avec la commande: websockify 31338 localhost:31337
Websockify supporte seulement les communications binaires, mais il est facile de convertir un Blob en String avec JavaScript:
c = new WebSocket('ws://localhost:31338', ['binary', 'base64'])
// Return an handler that convert a blob into a string and pass it to the callback
binaryToTextProxy = function(callback) {
return function(e) {
var reader = new FileReader();
reader.readAsText(e.data);
reader.onload = function() { // Define an event handler
var text = reader.result; // This is the file contents
callback(text);
}
}
}
c.onmessage = binaryToText(function(msg){
// Handle received messages
console.log(msg);
})
c.onopen = function(){
c.send("[dst=server]auth bob bob")
}