【问题标题】:socket.io get data from onclick action then pass the data to other pages to execute the datasocket.io 从 onclick 动作中获取数据,然后将数据传递给其他页面以执行数据
【发布时间】:2013-01-02 08:02:31
【问题描述】:

我想使用 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);
  });
});

【问题讨论】:

    标签: node.js socket.io communicate


    【解决方案1】:

    如果您希望将消息传播到所有客户端/套接字,则在您的服务器中您应该具有以下内容:

    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 代码,在将消息发送到服务器后进行所需的更改。

    【讨论】:

    • 你能告诉我哪里做错了吗?我的意思是我的代码在socket.io部分方面的逻辑冲突
    • chat_room.sockets.emit('chat', data); 这行在我看来并不好,因为您不想从服务器向每个套接字发送消息(这就是那行所说的,但我不确定这是否有效)。使用我建议的代码,socket.broadcast.emit('chat', data);you 是说:“名为socket 的套接字将广播一条消息,触发所有其他套接字中的chat 操作,发送data 作为参数”
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-07
      • 1970-01-01
      • 2022-01-01
      • 2018-12-11
      • 1970-01-01
      • 1970-01-01
      • 2015-11-04
      • 2020-05-30
      相关资源
      最近更新 更多