socket.io の Javascript クライアント コードがどのように機能するかを理解しようとしています。具体的には、私の目標は、サーバーの場所をどのように知るかを理解することです。
プログラムで使用するクライアント コードは非常に単純です。socket.io.js にリンクするだけです。
<script src="./socket.io/socket.io.js"></script>
その後:
var socket = io.connect()
それだけです - ソケットは自動的にサーバーに接続します。しかし、それはどのように知っていますか?
私はsocket.io.jsを見て、これが私が見つけたものです(コメントはトリミングされています):
var io = ('undefined' === typeof module ? {} : module.exports);
(function() {
/** Copyright(c) 2011 LearnBoost <dev@learnboost.com> * MIT Licensed */
(function (exports, global) {
var io = exports;
io.version = '0.9.11';
io.protocol = 1;
io.transports = [];
io.j = [];
io.sockets = {};
/**
* Manages connections to hosts.
* @param {String} uri
* @Param {Boolean} force creation of new socket (defaults to false)
* @api public
*/
io.connect = function (host, details) {
var uri = io.util.parseUri(host)
, uuri
, socket;
if (global && global.location) {
uri.protocol = uri.protocol || global.location.protocol.slice(0, -1);
uri.host = uri.host || (global.document
? global.document.domain : global.location.hostname);
uri.port = uri.port || global.location.port;
}
uuri = io.util.uniqueUri(uri);
...
})('object' === typeof module ? module.exports : (this.io = {}), this);
...
})();
秘密は「グローバル」パラメーターにあるようですが、この関数に「グローバル」を正確に送信するのは誰ですか? (括弧だらけで機能がわかりにくい…)