Socket.IO ne fonctionne qu'en local
J'ai ce Node.JS serveur:
var app = require('express')();
var server = app.listen(80);
var io = require('socket.io').listen(server);
var posx = 10;
var posy = 10;
app.get('/', function (req, res) {
res.sendfile( __dirname + '/index.html' );
});
io.sockets.on('connection', function (socket) {
socket.emit('start', {
x: posx,
y: posy
});
socket.on('newpos', function (data) {
posx = data["x"];
posy = data["y"];
socket.broadcast.emit('move', { x: posx, y: posy });
});
});
CÔTÉ CLIENT CODE:
var socket = io.connect('http://localhost');
socket.on('start', function (data) {
$("#pointer").animate({
'top': data["y"],
'left': data["x"]
}, 0);
});
socket.on('move', function (data) {
$("#pointer").animate({
'top': data["y"],
'left': data["x"]
}, "slow");
});
$("#pointer").draggable({
stop: function(event, ui) {
var pos = $("#pointer").position();
socket.emit('newpos', {
'x': pos.left,
'y': pos.top
});
}
});
Le problème est qu'il ne semble être que le travail local.
Sur ubuntu chrome-je obtenir:
XMLHttpRequest cannot load http://localhost/socket.io/1/?t=1344711676473. Origin http://192.168.1.130 is not allowed by Access-Control-Allow-Origin.
Alors que sur un mac, je vais avoir une erreur pour le même fichier...
La moindre idée de ce que peut être le problème?
Quel est votre code côté client?
veuillez vérifier mon montage.
veuillez vérifier mon montage.
OriginalL'auteur | 2012-08-11
Vous devez vous connecter pour publier un commentaire.
Un domaine du site n'a pas à faire avec où il est hébergé, il a à voir avec ce que l'URL que vous utilisez pour y accéder.
Même si "192.168.1.130" et "localhost" nous résoudre à le même serveur, ils sont considérés comme des domaines différents.
Comme un résultat, parce que vous avez le côté client code:
Vous vous connectez à l' domaine localhost. Si le code client est servi par localhost, vous êtes bien, mais si vous chargez le client à partir d'un autre domaine (par exemple 192.168.1.130), alors vous devrez faire face à des problèmes. Depuis le navigateur et le serveur de point de vue, vous pourrait facilement être un parfait inconnu en essayant d'accéder à ce service.
Pour résoudre le problème du changement du côté client création de la socket:
var socket = io.connect('192.168.1.130');
Vous devriez avoir votre problème résolu.
Vraiment bien, il suffit de supprimer le paramètre de complètement et essayez de lancer:
var socket = io.connect();
De cette façon, il sera, par défaut, quel que soit le domaine que vous sont fondées sur, et il va travailler à la fois sur localhost, la propriété intellectuelle, et éventuellement le nom de domaine que vous utilisez.
Non, c'est une erreur facile à faire! La question sera d'aider d'autres personnes confrontées à des problèmes similaires.
Que faire si j'ai besoin de spécifier un numéro de port avec var socket = io.connect(); comment le feriez-vous?
D'accord, très erreur facile à faire. Sur La Socket.io 1.x j'ai simplement besoin d'utiliser:
var socket = io();
Aucun besoin de .connect();Je suis heureux que vous ne le supprimez pas, se sont avérées très utiles et maintenant, je vais probablement jamais l'oublier. 😉
OriginalL'auteur slifty
Modifier l'application.écouter(80) app.écouter(80, '192.168.1.130') pour qu'il utilise que la propriété intellectuelle, de cette façon, votre Url à partir de socket.io doit être correcte. Assurez-vous également d'accéder à partir de 192.168.1.130 dans votre navigateur, même si vous l'essayez sur la machine locale.
thnx homme votre suggestion a résolu mon problème 🙂
OriginalL'auteur Clarence