试图了解Socket.IO-套接字并发出

Fth

我正在尝试了解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'

jfriend00

但是接下来的两行是做什么的呢?这是什么,什么是“连接”,参数套接字的起源是什么,这意味着什么:某些:“数据”?

让我们逐行检查代码并进行解释:

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对象fontSizecolor以及type

然后,该行:

});

这只是关闭了io.on(...之前开始生产线。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

访问在socket.io中发出消息的套接字

来自分类Dev

Node.js-Azure-Socket.io-为什么我用完了并发套接字?

来自分类Dev

从任何地方的套接字(Socket.io)访问发出的数据

来自分类Dev

套接字 io,无法获取或发出消息

来自分类Dev

如何在Express 4路由中使用socket.io向连接的套接字发出事件?

来自分类Dev

Socket.io - 在服务器发出时调用了错误的客户端套接字事件

来自分类Dev

套接字 IO 发出两次事件

来自分类Dev

将节点js更新为1.0.6后,套接字io不向特定套接字发出消息

来自分类Dev

将套接字作为Socket.io参数传递?

来自分类Dev

Socket.io 1.0 + Express 4.2 =无套接字连接

来自分类Dev

NodeJS&Socket.io:控制器中的套接字

来自分类Dev

Socket.io + Azure Web套接字问题

来自分类Dev

Socket.io错误向套接字发送消息

来自分类Dev

在socket.io中的套接字中添加变量

来自分类Dev

NodeJS&Socket.io:控制器中的套接字

来自分类Dev

Socket.io 1.0 + Express 4.2 =无套接字连接

来自分类Dev

Socket.io获取套接字所属的名称空间

来自分类Dev

在socket.io中获得套接字的空间

来自分类Dev

什么是socket.io中的套接字变量

来自分类Dev

Socket.io-优化2个套接字之间的通信

来自分类Dev

Socket.io从Node中的多个套接字接收数据

来自分类Dev

使用 socket.io 创建多个套接字时的 ENOBUFS

来自分类Dev

Web 套接字、socket.io 或其他替代方案

来自分类Dev

在 socket.io 中收集套接字返回的结果

来自分类Dev

Sailsjs套接字IO

来自分类Dev

Socket.io发出循环

来自分类Dev

使用socket.io-redis的socket.io:将所有套接字对象放在一个房间中

来自分类Dev

套接字IO是否涉及磁盘IO?

来自分类Dev

套接字io抱怨CORS

Related 相关文章

热门标签

归档