Je commence à jouer avec node.js et comme tout le monde, je veux faire une conversation.
Mon idée est exécutée nœud.js avec socket.io dans le port 9090, par exemple, et mon client HTML dans le Port 8080. Mon client HTML sera servi indépendant. P>
Mon serveur: P>
<!DOCTYPE html> <html> <head> <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script> <script src="http://cdn.socket.io/stable/socket.io.js"></script> <script> $(document).ready(function () { var socket = new io.Socket("localhost", {port: 8080}); socket.on('connect', function () { socket.send('A client connected.'); }); socket.on('message', function (message) { $('div#messages').append($('<p>'), message); }); socket.on('disconnect', function () { console.log('disconnected'); }); socket.connect(); $('input').keydown(function (event) { if(event.keyCode === 13) { socket.send($('input').val()); $('input').val(''); } }); }); </script> </head> <body> <input type="text" style="width: 300px;" /> <div id="messages" style="border:solid 1px #000;"> </div> </body> </html>
3 Réponses :
Vous ne pouvez pas créer de requêtes AJAX aux URL qui ne sont pas sur le même nom d'hôte et le même port que la page en cours. C'est une restriction de sécurité dans tous les navigateurs Web. P>
Votre code client n'est pas réellement servi à partir du port 8080 que vous le souhaitez.
var sys = require('sys'); var express = require('express'); var io = require('socket.io'); var app = express.createServer(); app.listen(8080); app.use(express.static(__dirname)); app.get('/', function(req, res){ res.render('index.html', { title: 'Chat' }); }); var socket = io.listen(app); socket.on('connection', function (client) { client.on('message', function (msg) { socket.broadcast(msg); }); client.on('disconnect', function () { }); });
Lorsque j'ai mis à jour mon client à:
<!DOCTYPE html> <html> <head> <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script> <script src="http://localhost:8080/socket.io/socket.io.js"></script> <script> var socket = io.connect("http://localhost", {port: 8080}); socket.on('connect', function () { socket.send('A client connected.'); }); socket.on('message', function (msg) { $('div#messages').append($('<p>'), msg); }); socket.on('disconnect', function () { console.log('disconnected'); }); $(document).ready(function(){ $('#btn_send').click(function (event) { socket.send($('#txt_msg').val()); $('#txt_msg').val(''); }); }); </script> </head> <body> <input type="text" id="txt_msg" style="width: 300px;" /><input type="button" id="btn_send" value="send" /> <div id="messages" style="border:solid 1px #000;"> </div> </body> </html>
Il a fonctionné quand j'ai utilisé: /socket.io/socket.io.js and io.connect (" iPaddress ", {Port: 8080}). NODE.JS sert apparemment automatiquement le fichier JS et lorsque j'ai utilisé l'adresse IP de l'hôte au lieu de localhost, il a été contourné la restriction d'origine.
Recherchez dans ce, vous avez problème similaire stackoverflow.com / Questions / 48198835 / Socket-io-404-error / ...