【发布时间】:2016-10-07 08:36:09
【问题描述】:
我正在使用 node.js、express 和 socket.io 为 websocket 应用程序建立基础。我决定将设置socket.io 的代码放在一个单独的模块中会很优雅,这样我的server.js 文件可以更小,调用require 来执行socket.io 设置职责。
// server.js
// set up ======================================================================
var express = require('express');
var app = express();
var server = require('http').Server(app);
var io = require('socket.io')(server);
var port = process.env.PORT || 80;
// routes ======================================================================
app.get('/', function (req, res) {
res.sendFile(__dirname + '/index.html');
});
// socket.io controller ========================================================
require('./app/ws-controller.js')(io);
// launch ======================================================================
server.listen(port, function () {
console.log('Server listening on port ' + port + '!');
});
在我的ws-controller.js 文件中,我放置了一些代码来开始试验socket.io。
// app/ws-controller.js
module.exports = function(io) {
var numClients = 0;
io.on('connection', function (socket) {
numClients++;
console.log(numClients);
});
}
index.html 中嵌入的客户端脚本极少。
// client side script
var port = 80;
var socket = io.connect('http://127.0.0.1:' + port);
现在进入重点。在打开指向localhost 的新浏览器选项卡时,服务器会登录到控制台,并增加numClients 的数量。这实际上是如何工作的?我确信numClients 将超出范围,并希望在控制台上看到异常。当绑定到on connection 事件的回调函数触发时,它不应该看到numClients 变量,因为它不是全局的,也不是io 对象的私有变量,对吧?这里到底发生了什么?
【问题讨论】:
标签: javascript node.js express socket.io