Fth*_*Fth 2 sockets node.js socket.io
我正在尝试了解 Socket.IO,但我需要帮助。我正在查看 Socket.IO 文档并找到了这段代码:
var io = require('socket.io')();
io.on('connection', function(socket){
socket.emit('an event', { some: 'data' });
});
Run Code Online (Sandbox Code Playgroud)
来源:http : //socket.io/docs/server-api/#socket#emit( name: string[,-…]) : socket
来自面向对象的编程背景,我明白第一行“导入”了 Socket.IO 库。此外,它“创建了一个 socket.io 的实例”,它被保存为变量 io。
但是接下来的两行是做什么的?这个io.on是什么,什么是'connection',参数 socket的来源是什么,这意味着什么:some: 'data'?
但是接下来的两行是做什么的?这个io.on是什么,'connection'是什么,参数socket的由来是什么,什么意思:some:'data'?
让我们逐行浏览您的代码并解释:
var io = require('socket.io')();
io.on('connection', function(socket){
socket.emit('an event', { some: 'data' });
});
Run Code Online (Sandbox Code Playgroud)
首先,线路:
var io = require('socket.io')();
Run Code Online (Sandbox Code Playgroud)
这条线做了三件事。首先,它使用require('socket.io'). 其次,它在最后调用返回模块上的构造函数()。然后,它将构造函数的返回结果分配给变量io。根据 socket.io 文档,以这种方式调用构造函数会在默认端口 80 上启动一个 Web 服务器,该服务器正在侦听传入的 socket.io 连接。构造函数的返回结果是 socket.io 服务器实例(在io变量中),可用于以后的 socket.io 操作。
然后,该行:
io.on('connection', function(socket){
Run Code Online (Sandbox Code Playgroud)
在.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' });
Run Code Online (Sandbox Code Playgroud)
这表示当建立新连接时,您希望立即发送该socket新消息。在 socket.io 中,消息由两部分组成 - 首先是消息名称,其次是一些可选的消息数据。在这种特殊情况下,消息名称是'an event'。消息名称必须是字符串,但您几乎可以将它们设为任何您想要的字符串名称(我认为可能有一些保留名称,例如 ping 和 pong,但除此之外,这完全由您来组成)消息名称。为了接收您服务器发送的消息,连接另一端的客户端只需要监听您在此处发送的完全相同的消息名称。
to 的第二个参数.emit()是可选的,可以是您想要与消息一起发送的一些数据。这是一个更简单的例子来说明:
socket.emit('setColor', 'blue');
Run Code Online (Sandbox Code Playgroud)
这会发送'setColor'消息并"blue"随其发送数据,以便接收客户端知道应该将其设置为什么颜色。
数据可以是任何可以用 JSON 正确表示的 Javascript 数据。因为您实际上无法通过网络发送实时 Javascript 对象或数组,所以这些对象被序列化为 JSON 格式,然后作为文本发送。接收客户端将反序列化它并将其转换回它应该是的任何数据类型。所以,在你的具体例子中,它是这样做的:
socket.emit('an event', { some: 'data' });
Run Code Online (Sandbox Code Playgroud)
那是发送一个 Javascript 对象。的{ some: 'data' }在Javscript语法对象文本的声明。在这种特殊情况下,这是一个 Javascript 对象,它具有一个名称some为 的属性,该属性的值为'data'。这显然仅用于示例目的,因为实际应用程序可能具有更有意义的数据,例如:
socket.emit('format', {fontSize: 16, color: 'blue', type: 'san serif'});
Run Code Online (Sandbox Code Playgroud)
然后,接收客户端将获得一个包含所有三个属性的 Javascript 对象fontSize,color以及type。
然后,该行:
});
Run Code Online (Sandbox Code Playgroud)
这只是关闭了io.on(...之前启动的线路。
| 归档时间: |
|
| 查看次数: |
1954 次 |
| 最近记录: |