ho una semplice applicazione con node.js socket.io (1.3.5), tratto da esempi socket.io:Socket.io cliente ignorando porta quando namespace utilizzato [Bug?]
// Setup basic express server
var express = require('express');
var app = express();
var server = require('http').createServer(app);
var io = require('socket.io')(server);
var port = process.env.PORT || 3000;
server.listen(port, function() {
console.log('Server listening at port %d', port);
});
// Routing
app.use(express.static(__dirname + '/public'));
io.of('/admin').on('connection', function(socket){
//handle conection on /admin namespace
});
io.of('/user').on('connection', function(socket){
//handle conection on /user namespace
});
Ora, in il mio front-end mi collego a questi spazi dei nomi specifici in questo modo (ancora una volta, preso dal esempio):
var admin_socket = io('/admin');
var user_socket = io('/user');
l'applicazione è in esecuzione sulla porta 3000 e il sito viene aperto utilizzando URL localhost:3000
.
Quando faccio ciò ottengo errori CORS, sembra che Socket.io sul lato client non rilevi automaticamente il numero di porta non appena inizio a usare gli spazi dei nomi (negli strumenti dev di firefox posso vedere richieste che vanno a localhost/
anziché a localhost:3000/
).
Se sul mio lato server Non faccio uso di namespace:
io.on('connection', function(socket){
//handle general conection
});
E sul front-end che si collegano in questo modo:
var socket = io();
Tutto funziona bene, automatico porto -discovery funziona e negli strumenti dev firefox posso vedere le connessioni effettuate a localhost:3000/
.
In alternativa, se ho ancora utilizzare gli spazi dei nomi sulla mia back-end, e il front-end si collega in questo modo:
var admin_socket = io('localhost:3000/admin');
var user_socket = io(':3000/user'); //I can skip localhost
Anche in questo caso tutto funziona (e anzi in strumenti di sviluppo di Firefox che posso vedere di rete richieste che vanno a localhost:3000/
).
Come mai la ricerca automatica della porta non funziona con gli spazi dei nomi? C'è un modo per farlo funzionare? Mi sto perdendo qualcosa qui? Grazie.
Vedere la mia risposta qui sotto per una correzione ...
Questo problema è stato davvero fastidioso, non c'era in tutte le versioni precedenti di socket.io. Grazie per la correzione! – Evers
Bug ancora esistente in 1.3.6, dove ha consumato un giorno del mio tempo. Mille grazie per questo articolo di correzione con correzione - Avevo smesso di scoprire che funzionava nello spazio dei nomi predefinito. – willw
Puoi spostare la * risposta * dalla * domanda * e in una * risposta *? – phihag