我正在尝试了解Socket.IO,但我需要帮助。我正在查看Socket.IO文档,并发现了这段代码:
var io = require('socket.io')();
io.on('connection', function(socket){
socket.emit('an event', { some: 'data' });
});
来源:http : //socket.io/docs/server-api/#socket#emit( name: string[,-…]) : socket
来自面向对象的编程背景,我知道第一行“导入”了Socket.IO库。此外,它“创建一个socket.io实例”,将其另存为变量io。
但是接下来的两行是做什么的呢?这个io.on是什么,什么是“ connection”,什么是参数socket的起源,这是什么意思:some:'data'?
但是接下来的两行是做什么的呢?这是什么,什么是“连接”,参数套接字的起源是什么,这意味着什么:某些:“数据”?
让我们逐行检查代码并进行解释:
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){
在.on()
对socket.io实例方法是注册事件处理程序的通用方法。一旦您更详细地了解了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对象。的{ some: 'data' }
在Javscript语法对象文本的声明。在这种情况下,这是一个Javascript对象,具有一个属性,其名称some
为,该属性的值为'data'
。显然,这只是出于示例目的,因为实际的应用程序可能会具有更有意义的数据,例如:
socket.emit('format', {fontSize: 16, color: 'blue', type: 'san serif'});
然后,接收方客户端将获得一个具有所有三个属性的Javascript对象fontSize
,color
以及type
。
然后,该行:
});
这只是关闭了io.on(...
之前开始的生产线。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句