0

シンプルなリアルタイムアプリケーションを作成しています。

正方形のページがあり、クリックすると正方形がペイントされるか、ペイントが削除されます。

1つのタブでイベントを作成し、他のタブで彼の効果を確認したいと思います。

node.jsとsocket.ioの経験はあまりありません

私のサーバーがあります:

    var sock = require('socket.io')
    , express = require('express')
    , path = require('path')
    var app = express();

    app.configure(function(){
      app.set('views', __dirname + '/views');
      app.set('view engine', 'jade');
      app.use(express.cookieParser());
      app.use(express.static(path.join(__dirname, 'public')));
     });

    app.get('/', function (req,res) {
       io.sockets.in(req.sessionID);
       res.render(__dirname + '/views/teste.jade');
    });

    io = sock.listen(app.listen(3000));

    io.sockets.on('connection', function(socket){ 
      var sess = socket.handshake.session;
      socket.on('hasClass', function(data) {
         socket.emit('hasClass', {hasClass: data.hasClass})
      });
    });

そして私の.jadeがあります:

    doctype 5
      html
        head
          title= "Express"
          link(rel='stylesheet', href='/stylesheets/style.css')
          script(src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js")
          script(src="/socket.io/socket.io.js")
          script
          $(document).ready(function() {
             var socket = io.connect('http://localhost:3000');
             socket.on('connect', function(){
               $('#quadrado').click(function() {
                 if ($('#quadrado').hasClass('clicked')) {
                   socket.emit('hasClass', {hasClass:true});
                 } else {
                   socket.emit('hasClass', {hasClass:false});
                 }
               });
            });

            socket.on('hasClass', function(data){
              if(data.hasClass) {
                $('#quadrado').removeClass('clicked');
              } else {
                $('#quadrado').addClass('clicked');
              }
            });
         });
       body
         block content
4

1 に答える 1

0

サーバー コードでは、次のようになります。

socket.on('hasClass', function(data) {
   socket.emit('hasClass', {hasClass: data.hasClass})
});

イベントを取得したソケットにイベントを再発行するだけです。他のすべてのソケットに送信する場合は、次を使用します。

socket.broadcast.emit(...);

そして、それを受信したソケットを含むすべてのソケットに送信したい場合は、

io.sockets.emit(...);
于 2012-11-29T17:52:00.107 に答える