node.js - Firefox 插件中的 Socket.io

标签 node.js sockets websocket firefox-addon socket.io

我正在使用 addon sdk 创建一个 firefox 扩展,该扩展具有用于用户登录的小部件,并在成功登录后,使用 socket.io 和 node.js 创建一个到我控制的套接字服务器的 websocket。

我不确定我是否以正确的方式处理它,但是,在 lib/main.js 中,我有以下代码:

function start_socket(){
        console.log("trying to open websocket!");
        var io = require("socket.io.js");
        socket = io.connect("https://someip:port");
        socket.on('connect', function() {
                console.log('connected to server');
        });
}

如果我运行它,我会收到以下错误:

console.log: http: trying to open websocket!
console.error: http: 
  Message: TypeError: global.location is undefined
  Stack:
    Socket.prototype.isXDomain@resource://gre/modules/XPIProvider.jsm -> jar:file:///var/folders/v6/jpc7yv2123nbhl7hb8rshygh0000gn/T/tmp3gAPRS.mozrunner/extensions/<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="076d6e63362a4f516c6e44324b50323263713760476d62737766646c297f776e" rel="noreferrer noopener nofollow">[email protected]</a>!/bootstrap.js -> resource://gre/modules/commonjs/toolkit/loader.js -> resource://jid1-hvkic5lw55dv0g-at-jetpack/http/lib/socket.io.js:1877
Socket.prototype.handshake@resource://gre/modules/XPIProvider.jsm -> jar:file:///var/folders/v6/jpc7yv2123nbhl7hb8rshygh0000gn/T/tmp3gAPRS.mozrunner/extensions/<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="a8c2c1cc9985e0fec3c1eb9de4ff9d9dccde98cfe8c2cddcd8c9cbc386d0d8c1" rel="noreferrer noopener nofollow">[email protected]</a>!/bootstrap.js -> resource://gre/modules/commonjs/toolkit/loader.js -> resource://jid1-hvkic5lw55dv0g-at-jetpack/http/lib/socket.io.js:1627
Socket.prototype.connect@resource://gre/modules/XPIProvider.jsm -> jar:file:///var/folders/v6/jpc7yv2123nbhl7hb8rshygh0000gn/T/tmp3gAPRS.mozrunner/extensions/<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="c7adaea3f6ea8f91acae84f28b90f2f2a3b1f7a087ada2b3b7a6a4ace9bfb7ae" rel="noreferrer noopener nofollow">[email protected]</a>!/bootstrap.js -> resource://gre/modules/commonjs/toolkit/loader.js -> resource://jid1-hvkic5lw55dv0g-at-jetpack/http/lib/socket.io.js:1699
Socket@resource://gre/modules/XPIProvider.jsm -> jar:file:///var/folders/v6/jpc7yv2123nbhl7hb8rshygh0000gn/T/tmp3gAPRS.mozrunner/extensions/<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="94fefdf0a5b9dcc2fffdd7a1d8c3a1a1f0e2a4f3d4fef1e0e4f5f7ffbaece4fd" rel="noreferrer noopener nofollow">[email protected]</a>!/bootstrap.js -> resource://gre/modules/commonjs/toolkit/loader.js -> resource://jid1-hvkic5lw55dv0g-at-jetpack/http/lib/socket.io.js:1551
io.connect@resource://gre/modules/XPIProvider.jsm -> jar:file:///var/folders/v6/jpc7yv2123nbhl7hb8rshygh0000gn/T/tmp3gAPRS.mozrunner/extensions/<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="3f55565b0e12776954567c0a73680a0a5b490f587f555a4b4f5e5c5411474f56" rel="noreferrer noopener nofollow">[email protected]</a>!/bootstrap.js -> resource://gre/modules/commonjs/toolkit/loader.js -> resource://jid1-hvkic5lw55dv0g-at-jetpack/http/lib/socket.io.js:94
start_socket@resource://gre/modules/XPIProvider.jsm -> jar:file:///var/folders/v6/jpc7yv2123nbhl7hb8rshygh0000gn/T/tmp3gAPRS.mozrunner/extensions/<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="f19b9895c0dcb9a79a98b2c4bda6c4c49587c196b19b94858190929adf898198" rel="noreferrer noopener nofollow">[email protected]</a>!/bootstrap.js -> resource://gre/modules/commonjs/toolkit/loader.js -> resource://jid1-hvkic5lw55dv0g-at-jetpack/http/lib/main.js:25
signin<.onComplete@resource://gre/modules/XPIProvider.jsm -> jar:file:///var/folders/v6/jpc7yv2123nbhl7hb8rshygh0000gn/T/tmp3gAPRS.mozrunner/extensions/<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="d5bfbcb1e4f89d83bebc96e09982e0e0b1a3e5b295bfb0a1a5b4b6befbada5bc" rel="noreferrer noopener nofollow">[email protected]</a>!/bootstrap.js -> resource://gre/modules/commonjs/toolkit/loader.js -> resource://jid1-hvkic5lw55dv0g-at-jetpack/http/lib/main.js:17
emit@resource://gre/modules/XPIProvider.jsm -> jar:file:///var/folders/v6/jpc7yv2123nbhl7hb8rshygh0000gn/T/tmp3gAPRS.mozrunner/extensions/<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="442e2d2075690c122f2d07710813717120327423042e21303425272f6a3c342d" rel="noreferrer noopener nofollow">[email protected]</a>!/bootstrap.js -> resource://gre/modules/commonjs/toolkit/loader.js -> resource://gre/modules/commonjs/sdk/event/core.js:94
onreadystatechange@resource://gre/modules/XPIProvider.jsm -> jar:file:///var/folders/v6/jpc7yv2123nbhl7hb8rshygh0000gn/T/tmp3gAPRS.mozrunner/extensions/<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="3a50535e0b17726c5153790f766d0f0f5e4c0a5d7a505f4e4a5b595114424a53" rel="noreferrer noopener nofollow">[email protected]</a>!/bootstrap.js -> resource://gre/modules/commonjs/toolkit/loader.js -> resource://gre/modules/commonjs/sdk/request.js:98

仅供引用,请参阅下面我尝试使用 ws 的尝试,但它也不起作用:

let { window } = require("sdk/addon/window");
let exampleSocket = new window.WebSocket("ws://someip:port");

我的问题是:

  1. 我采用这种方法的方向正确吗?
  2. 我应该尝试使用浏览器 websockets (ww/wws) 吗?我尝试使用 ww/wws,但是它无法连接到我的 Node 套接字服务器。我会从服务器收到一条 debug - destroying non-socket.ioupgrade 消息,如果我将 destroyupgrade 设置为 false,我将什么也得不到,就好像甚至没有提出任何要求。
  3. 如果我使用 socket.io 以正确的方式处理它,我是否正确加载它?这可能是问题所在吗?

任何帮助都会很棒,即使它只是插入我/保持正确的方向。我现在有点不知所措。

最佳答案

我终于让 websockets 与 socket.io 一起工作了。下面展示了具体方法。

我的 main.js 文件:

var pageWorkers = require("sdk/page-worker");
var self = require("sdk/self");

pageWorkers.Page({
  contentScriptFile: self.data.url("worker.js"),
  contentURL: self.data.url("worker.html"),
  contentScriptFileWhen: "ready",
  onMessage: function(message) {
    console.log(message);
  }
});

和worker.html文件:

<html>
<head>
<script src="https://code.jquery.com/jquery-2.1.0.min.js"></script>
<script src="http://domain:port/socket.io/socket.io.js"></script>
<script>
  var socket = io.connect("http://domain:port");
  socket.on('connect', function(){
    socket.on('event', function(data){});
    socket.on('error', function(data){console.log("error: " + error)});
    socket.on('disconnect', function(){});
  });
</script>
</head>
<body>
</body>
</html>

关于node.js - Firefox 插件中的 Socket.io,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22987626/

相关文章:

javascript - 从 Mongodb 格式化 ISODate

javascript - Node.js GET 请求 ETIMEDOUT & ESOCKETTIMEDOUT

python - 在应用程序之间发送 Canvas 数据

python - 在此 Python 3 客户端-服务器示例中,客户端不能发送多条消息

javascript - 需要一些帮助来理解 nodejs 和 socket.io

mysql - 连接到 mysql 时出现错误 "connect ECONNREFUSED 127.0.0.1:3306"

node.js - 将 Elastic Beanstalk 上的 Web 服务器与 MongoDB Atlas 上的数据库服务器连接时出错

c++ - 如果我想制作分布式互斥库,我是否必须创建一个线程?

javascript - 网络套接字 : onmessage is not firing. !

c# - Tweetinvi 接收推文速度慢?备择方案?