但是接下来的两行是做什么的呢?这个io.on是什么,是什么
'connection',参数socket的来源是什么,什么
这是否意味着:一些:'数据'?
让我们逐行浏览你的代码并解释一下:
var io = require('socket.io')();
io.on('connection', function(socket){
socket.emit('an event', { some: 'data' });
});
第一行:
var io = require('socket.io')();
这条线做了三件事。首先,它使用require('socket.io') 加载模块。其次,它在返回的模块上调用构造函数,最后带有()。然后,它将构造函数的返回结果分配给变量io。根据 socket.io 文档,以这种方式调用构造函数会在默认端口 80 上启动一个 Web 服务器,该端口正在侦听传入的 socket.io 连接。构造函数的返回结果是socket.io服务器实例(在io变量中),可以用于未来的socket.io操作。
然后,一行:
io.on('connection', function(socket){
socket.io 实例上的.on() 方法是注册事件处理程序的通用方法。一旦你更详细地了解了 node.js,你就会认出这是一个EventEmitter 接口,事实上,socket.io 实例是EventEmitter 的一个子类。因此,通过这个特定的.on() 方法调用,您正在为'connection' 事件注册一个事件处理程序。
每当与您的 socket.io 服务器建立新的 socket.io 连接时,Socket.io 都会调用连接事件。这是您在新客户端连接时获得通知的方式。根据 socket.io 文档,您为该事件传递的回调将传递一个参数,即与新建立的连接关联的 socket 对象。此事件处理程序允许您在首次连接时立即查看每个新的 socket.io 连接。
然后,一行:
socket.emit('an event', { some: 'data' });
这表示当建立新连接时,您希望立即向新的socket 发送一条消息。在 socket.io 中,消息由两部分组成 - 首先是消息名称,其次是一些可选的消息数据。在这种特殊情况下,消息名称是'an event'。消息名称必须是一个字符串,但是您可以将它们设置为几乎任何您想要的字符串名称(我认为可能有一些保留名称,例如 ping 和 pong,但除此之外,这完全取决于您来组成消息名称。为了接收您的服务器发送的消息,连接另一端的客户端只需要侦听您在此处发送的完全相同的消息名称。
.emit() 的第二个参数是可选的,可以是您希望随消息一起发送的一些数据。这是一个更简单的例子来说明:
socket.emit('setColor', 'blue');
这会发送'setColor' 消息并与它一起发送数据"blue",以便接收客户端知道它应该设置为什么颜色。
数据可以是任何可以用 JSON 正确表示的 Javascript 数据。因为您实际上无法通过网络发送实时 Javascript 对象或数组,所以这些对象被序列化为 JSON 格式,然后作为文本发送。接收客户端将反序列化它并将其转换回它应该是的任何数据类型。所以,在你的具体例子中,它是这样做的:
socket.emit('an event', { some: 'data' });
那是发送一个 Javascript 对象。 Javscript 中的{ some: 'data' } 语法是对象字面量的声明。在这种特殊情况下,这是一个 Javascript 对象,它有一个名为 some 的属性,并且该属性的值为 'data'。这显然只是出于示例目的,因为真实的应用程序可能会有更有意义的数据,例如:
socket.emit('format', {fontSize: 16, color: 'blue', type: 'san serif'});
然后,接收客户端将获得一个包含所有三个属性的 Javascript 对象 fontSize、color 和 type。
然后,一行:
});
这只是关闭了之前启动的io.on(... 行。