在 Meteor 中使用 SockJS 连接到外部服务或流 API

Using SockJS in Meteor to connect to external service or stream API

我正在尝试使用我的 Meteor 中的 SockJS 连接到另一个服务,但我无法在 Meteor 客户端或服务器中获得对 SockJS 的引用。有没有人有使用 SockJS 连接到其他服务或从 Meteor 流式传输 API 的好例子?

我已尝试通过两种方式完成此操作,但 'socket' 始终未定义:

var socket = sockjs.createServer({ sockjs_url: 'http://api.hitbtc.com:8081' });
    socket.onmessage = function(msg) {
        var data = JSON.parse(msg.data);
        console.log("CONNECTED!!" + data)
    };


var socket = new SockJS('http://api.hitbtc.com:8081');
        socket.onmessage = function(msg) {
            var data = JSON.parse(msg.data);
            console.log("CONNECTED!!" + data)
        };

尽管 Meteor 本身使用了 SockJS,但它 hidden deeplyddp 包中,并没有真正暴露给用户。所以基本上,您在这里有两个选择:

  1. 您可以将另一个 SockJS 副本放入您的应用程序,...
  2. ...或者您可以教您的自定义服务器了解 DDP 协议,然后您将能够使用 DDP.connect 建立新连接。

如果您使用的是第三方服务,那么第二种解决方案当然没有意义。由于数据冗余,第一个解决方案感觉很难看,但如果 2. 不能接受,恐怕这是唯一的出路。

在服务器中:

执行 Npm.require('./') 并观察错误中告知的路径,从中你可以指向来自 Meteor 深处的包,在 SockJS 的情况下路径(在 Meteor 1.10.2 版本中)是:

Npm.require('./meteor/ddp-server/node_modules/sockjs');

在Sockjs的具体情况下,它的使用与Github页面上介绍的略有不同,如下:

const sockjs = Npm.require('./meteor/ddp-server/node_modules/sockjs');

const echo = sockjs.listen(WebApp.httpServer, {prefix: '/echo'});

echo.on('connection', function(conn) {
  conn.on ('data', function(message) {
    conn.write(message);
  });
  conn.on('close', function(){});
});

我没有在这些文件中找到 sockjs“客户端”包,因为 sockjs-client 包是特定于浏览器的。所以我从提供“echo”输出的 CDN 下载,我在我的测试环境中使用“--exclude-archs web.browser.legacy”,但从我读到的内容来看,如果你不这样做,sockjs-client 包是可用的' 使用它这个参数。 Sockjs 依赖于“faye-websocket”,它有一个客户端和一个 websocket 服务器,旨在 运行 在 NodeJs 上,这里是建议。

Ps: 我在客户端没有找到等效的形式(没有Npm.require)