0

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);
...
})();

秘密は「グローバル」パラメーターにあるようですが、この関数に「グローバル」を正確に送信するのは誰ですか? (括弧だらけで機能がわかりにくい…)

4

1 に答える 1

0

あなたが探しているパターンはこれです:

(function (exports,global) {
   ///content
}) (<whatever>, this);

this参照は、この関数が実行されるスコープです(このパターンは関数を定義し、実行します)。これはたまたまグローバルスコープです。javascriptスコープの詳細については、こちらを参照してください-http://tore.darell.no/pages/scope_in_javascript

于 2013-01-07T07:06:06.457 に答える