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

时间:2015-03-11 13:45:41

标签: meteor sockjs

我正在尝试使用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)
        };

2 个答案:

答案 0 :(得分:1)

尽管流星本身使用了SockJS,它ddp包内的hidden deeply并没有真正暴露给用户。所以基本上,你有两个选择:

  1. 您可以将SockJS的另一个副本放入您的应用中,......
  2. ...或者您可以教您的自定义服务器了解DDP协议,然后您就可以使用DDP.connect建立新连接。
  3. 如果您使用第三方服务,第二种解决方案当然没有意义。由于数据冗余,第一种解决方案感觉很难看,但如果2.不可接受,我担心它是唯一的出路。

答案 1 :(得分:0)

在服务器中:

执行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“ client”软件包,因为sockjs-client软件包特定于浏览器。因此,我从CDN下载了提供的“ echo”输出,我在测试环境中使用了“ --exclude-archs web.browser.legacy”,但是从我那里读出的内容中,如果您不使用sockjs-client软件包不要使用此参数。 Sockjs依赖于“ faye-websocket”,该客户端和客户端均设计用于在NodeJ上运行,这是建议。

Ps:我没有在客户端找到等效表格(没有Npm.require)