通过外部 js 进行实时鼠标跟踪

real time mouse tracking via the external js

我有一个使用 node.js 和 socket.io 实时鼠标移动的简单示例。

当我想将它包含在任何 html 站点上时,我必须连接到 node.js 服务器:

<script src="/socket.io/socket.io.js"></script>

var socket = io.connect('http://localhost:3000');

$(document).mousemove(function(e) {
  socket.emit('movement', {
    'id': socket.id,
    ..
  });
});

// more code later..

我想提供其他人跟踪他们的网站。大多数应用程序都需要插入这样的代码(当然是异步的 - 不是这种简单的方法):

<script src="http://localhost:3000/connect.js"></script>

这也是我想处理的方式。我是否应该将 socket.io.js + 我的代码的内容复制并粘贴到 connect.js 中?

将随机网站连接到我的 node.js 服务器是一个好方法还是更好的方法?

您正在寻找的是允许 Web 客户端连接到您的 Web 套接字服务器的脚本。

您可以创建一个文件:

  • 加载一些库,例如 jQuery and/or socket.io(其他网站可能没有加载这些库)
  • 然后执行你的应用程序逻辑

因此您需要在应用程序逻辑之前加载库。

像这样:

// embedded-script.js

// You can use this simple function to load the libraries you need
function loadScripts(scripts, complete) {
    var loadScript = function( src ) {
        var xmlhttp, next;
        if (window.XMLHttpRequest)  {
            xmlhttp = new XMLHttpRequest();
        } else {
            try {
                 xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
            } catch(e) {
                return;
            }
        }
        xmlhttp.onreadystatechange = function() {
            if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
                eval(xmlhttp.responseText);
                next = scripts.shift();
                if ( next ) {
                    loadScript(next);
                } else if ( typeof complete == 'function' ) {
                    complete();
                }
            }
        }
        xmlhttp.open("GET", src , true);
        xmlhttp.send();
    };
    loadScript( scripts.shift() );
}

// load the libraries you need
loadScripts([
  "https://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.0/jquery.min.js", // assuming you need jQuery
  "https://cdnjs.cloudflare.com/ajax/libs/socket.io/1.5.0/socket.io.min.js"
], function() {
   // libraries loaded.
   // your application logic here
});

然后给网站所有者这个嵌入代码:

<script src="http://your-domain.com/embedded-script.js"></script>

一些注意事项:

  • 在 CDN 中分发您的脚本

  • 如果您的应用程序逻辑涉及大量文件,您可能需要一个模块加载器来加载您的脚本。例如。 requirejs.

  • 我建议您不要在 mousemove 上发出套接字消息!这对您的服务器来说太过分了。你应该用更便宜的东西改变你的鼠标跟踪逻辑,例如用 a throttle or a debouncer 包装你的发射或只跟踪鼠标点击。