socket.io从onclick动作获取数据,然后将数据传递给其他页面以执行数据

时间:2013-01-02 08:02:32

标签: node.js socket.io communicate

我想使用node.js和socket.io创建一个页面。

页面内有两个按钮,当我点击其中一个按钮时,它会改变一个定义动画持续时间的变量(我在这里省略了CSS动画代码)。

当我在另一个网络浏览器上打开同一页面并单击其中一个按钮时,我希望看到两个网页的更改。我不知道如何在socket.on('chat', function(data){???});内编写代码以使两个页面相互通信。

客户方:

// socket.io代码 -

<script type="text/javascript" charset="utf-8">

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

    socket.on('chat', function  (data)
    {
         function change_position(data)
          {
           document.getElementById("animation1").style.WebkitAnimationDuration=data;
          }
    });

 </script>

.....

//动作 -

<body>
<button id="1b" type="button" style="position:absolute; left:377px; top:220px;" value="2s"; onclick="change_position(value)"> - 1 - </button>

<button id="2b" type="button" style="position:absolute; left:477px; top:220px;" value="15s"; onclick="change_position(value)"> - 2 - </button>
</body>

服务器端:

var io = require('socket.io'),
  connect = require('connect');

var app = connect().use(connect.static('public')).listen(3000);
var chat_room = io.listen(app);

chat_room.sockets.on('connection', function (socket) {

  socket.on('chat', function  (data) {
    chat_room.sockets.emit('chat', data);
  });
});

2 个答案:

答案 0 :(得分:2)

如果您希望邮件传播到所有客户端/套接字,则在服务器中应该包含以下内容:

chat_room.sockets.on('connection', function (socket) {

  socket.on('chat', function  (data) {
    socket.broadcast.emit('chat', data);
    socket.emit('chat',data);
  });

});

socket.emit('chat',data);允许您将消息也发回给它的发送者,因为广播会将所有其他套接字发送给它。

当然,您可以省略该行并处理客户端中的消息发送逻辑;即添加一些JavaScript代码,在将消息发送到服务器后立即进行所需的更改。

答案 1 :(得分:0)

您可以使用socket.emit('message',data)在您的客户端上发射。然后在服务器上使用chat_room.socket.on('message',data)获取它。使用chat_room.sockets.emit('message',data)将其发送给客户。