6

単純なNode.js双方向クライアント\サーバー通信チャネルで作業しており、サーバーでsocket.ioを使用し、クライアントでsocket.io-clientを使用しようとしています。

以下にコードを挿入しました。これは非常に基本的なものであり、複雑さを最小限に抑えるために、両方をローカルマシンで実行しています。

私が見ている動作は次のとおりです。

  1. サーバーを起動します。
  2. サーバーは「サーバー開始」をコンソールに記録します。
  3. クライアントを起動します。
  4. クライアントログ「サーバーの準備ができました!」
  5. 他に何も起こりません...

私が期待するのは、サーバーが「クライアントの準備ができました!」をログに記録することです。メッセージとコンテンツ(「受信準備完了」)。

WireSharkを使用して回線をスニッフィングしましたが、クライアントが設計どおりにメッセージを送信しているように見えますが、サーバーのコールバックは起動していません。

Express v3.1.0socket.io v0.9.13socket.io-client v0.9.11(すべてnpm経由でインストール)でノードv0.8.4を実行しています。

これがサーバーコードです...

var http = require('http'),  
    express = require('express'),
    app = express(),
    server = http.createServer(app);

app.configure(function(){
  app.use(express.static(__dirname + '/public'));
});

server.listen(8080);
console.log("Server started");

var io = require('socket.io').listen(server);

io.sockets
     .on('connection', function(socket){ 
          socket.emit('server ready', { msg: 'ready' }) ;
      })

     .on('comms', function(content) {
          console.log('Client is ready!');
          console.log(content);
     });

そして、これがクライアントコードです...

    var clientio = require('socket.io-client');
    var socket = new clientio.connect('http://localhost', { port: 8080 });

    socket
     .on('server ready', function(data){
          console.log('Server is ready!');
          socket.emit('comms', 'Ready received');
    })  

     .on('connect-error', function(error) {
          console.log('Connection Error\n' + error);
    })

     .on('error', function(error) {
          console.log('Socket Error\n' + error);
    })

socket.iosocket.io-clientの両方のドキュメントと例は、多少混乱していて(慈善的であるため)、少し動いているターゲットのように見えます...しかし、私が言えることから、これはうまくいくはずです。

私がどこで間違っているのかについて誰かが私にアドバイスをくれることを望んでいますか?

4

2 に答える 2

4

うまくいけば、これはあなたがそれをするのに必要なことを多かれ少なかれやっている。ほんの2、3の小さな変更。

app.js

var app     = require('express')()
    , server  = require('http').createServer(app)
    , io      = require('socket.io').listen(server);

    // using 'connect' to handle static pages
    app.use(require('connect').static(__dirname + '/public'))
    server.listen(8080);

    app.get('/', function (req, res) {
        res.sendfile(__dirname + '/index.html');
    });

    io.sockets.on('connection', function (socket) {
        socket.emit('server ready', { msg: 'ready' });

        socket.on('comms', function(content) {
            console.log(('Client is ready\n'));
            console.log(content);
        });
    });

index.html

<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js">

</script>

<script>
window.jQuery || document.write('<script src="js/jquery-1.8.3.min.js"><\/script>')
</script>

<script src="/socket.io/socket.io.js"></script>
</head>

<body>
<script>
(function (d, b) {

    function bindEvents() {
        function doSomething(msg) {
            $.each(msg, function (key, value) {
                console.log('doSomething...');
                $("body").append("<p>" + value + "</p>")
            });
        };

    // var socket = io.connect();
    var socket = io.connect('http://localhost');

    socket.on('server ready', function (msg) {
        console.log('Server is ready!\n', msg);
        doSomething(msg);
        socket.emit('comms', {
            msg: 'Client is Ready'
        });
    });

    socket.on('connect-error', function (err) {
        console.log('Connection Error\n', err);
    });

    socket.on('error', function (err) {
        console.log('Connection Error\n', err);
    });
};

$(document).ready(function () {
    bindEvents()
});

})(jQuery, this)
</script>
于 2013-02-17T16:46:39.563 に答える
4

サーバーには次のコードがあります。

io.sockets
 .on('connection', function(socket){ 
      socket.emit('server ready', { msg: 'ready' }) ;
  })

 .on('comms', function(content) {
      console.log('Client is ready!');
      console.log(content);
 });

あなたがすべきことは次のようなものです:

io.sockets.on('connection', function(socket){
    socket.emit('server ready', { msg: 'ready' });

    socket.on('comm', function(content){
        console.log('Client is ready!');
        console.log(content);
    });

});
于 2013-02-17T15:52:29.683 に答える