8
votes

nœud.js socket.io chat simple

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;">&nbsp;</div>
    </body>
</html>


1 commentaires

Recherchez dans ce, vous avez problème similaire stackoverflow.com / Questions / 48198835 / Socket-io-404-error / ...


3 Réponses :


0
votes

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.


0 commentaires

6
votes

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 () {
    });
});


0 commentaires

4
votes

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;">&nbsp;</div>
    </body>
</html>


1 commentaires

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.