[javascript] nodejs + WebSockets: rifiuta la connessione con un messaggio



0 Answers

Question

Voglio fornire un errore significativo al client quando troppi utenti sono connessi o quando si connettono da un dominio non supportato, quindi ...

Ho scritto un codice server WebSocket:

var http = require('http');
var httpServer = http.createServer(function (request, response)
{
    // i see this if i hit http://localhost:8001/
    response.end('go away');
});

httpServer.listen(8001);

// https://github.com/Worlize/WebSocket-Node/wiki/Documentation
var webSocket = require('websocket');
var webSocketServer = new webSocket.server({ 'httpServer': httpServer });

webSocketServer.on('request', function (request)
{
    var connection = request.reject(102, 'gtfo'); 
});

E qualche codice client WebSocket:

var connection = new WebSocket('ws://127.0.0.1:8001');
connection.onopen = function (openEvent)
{
    alert('onopen');
    console.log(openEvent);
};
connection.onclose = function (closeEvent)
{
    alert('onclose');
    console.log(closeEvent);
}
connection.onerror = function (errorEvent)
{
    alert('onerror');
    console.log(errorEvent);
};
connection.onmessage = function (messageEvent)
{
    alert('onmessage');
    console.log(messageEvent);
};

Tutto ciò che ottengo è alert('onclose'); con un oggetto CloseEvent registrato alla console senza alcun codice di stato o messaggio che riesco a trovare. Quando mi collego tramite ws://localhost:8001 la callback httpServer non entra in gioco, quindi non riesco a prenderla lì. RFC suggerisce che dovrei essere in grado di inviare qualsiasi codice di stato diverso da 101 quando c'è un problema, ma Chrome genera un errore nella console Unexpected response code: 102 . Se chiamo request.reject(101, 'gtfo') , implicando che ha avuto successo, ricevo un errore di handshake, come mi aspetterei.

Non sono proprio sicuro di cos'altro posso fare. Non è proprio possibile ora ottenere la risposta del server nell'implementazione WebSocket di Chrome?

ETA: Ecco un brutto scherzo nel frattempo, spero che non sia quello che devo fare.

var connection = request.accept(null, request.origin);
connection.sendUTF('gtfo');
connection.close();



Related