2013-02-19 100 views
3

这个来自Socket.IO website的例子让我很困惑。 发送和获取数据(确认)什么是Socket.IO发送和获取数据(确认)?

客户

<script> 
    socket.on('connect', function() { 
     socket.emit('ferret', 'tobi', function (data) { 
      console.log(data); // data will be 'woot' 
     }); 
    }); 
</script> 

服务器

io.sockets.on('connection', function (socket) { 
    socket.on('ferret', function (name, fn) { 
     fn('woot'); 
    }); 
}); 

我其实重现这个例子。我不明白的是:

  • Q1:这是如何工作的第一个地方。服务器(执行fn时)是否自动向发送结果给客户端? Socket.IO是否将fn绑定到客户端第三个参数emit
  • Q2:是什么在服务器匿名function (name, fn)的(未使用)name参数?记录它显示它是undefined,为什么?

回答

6

由我自己发现,纠正我,如果我错了:

  • name(什么不吉利的名字从官方文档!)实际上是由客户端发送的数据。
  • fn对应于客户端代码的第3个参数,并且在执行时(从服务器)自动地(?)将数据发送回客户端。惊人!
+0

实际上,服务器只是将传递给'fn'的论点客户端,所以该功能在那里执行,而不是在服务器上执行。 – Killah 2014-04-30 00:11:46

+0

yes name是由客户发送的数据,他们称之为名称,因为它引用'tobi'的名称:) – YouneL 2017-06-01 17:25:12

0

确实;如果您将“fn”重命名为“callback”,则会更清晰,如下所示:Acknowledgment for socket.io custom event。该回调永远不会在服务器端执行;服务器只是将传递给回调的数据(在本例中为字符串“woot”)发送回客户端作为确认。然后使用服务器发送的数据在客户端上执行回调。

0

从客户端发送数据到服务器

socket.emit("Idofhtmltag",value); 

从服务器接收数据,在客户端HTML添加此

socket.io("Idofhtmltag",function(msg){ }) ;