【问题标题】:Using SockJS in Meteor to connect to external service or stream API在 Meteor 中使用 SockJS 连接外部服务或流 API
【发布时间】:2015-05-13 08:11:01
【问题描述】:

我正在尝试使用 Meteor 中的 SockJS 连接到另一个服务,但我无法在流星客户端或服务器中获得对 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


    【解决方案1】:

    尽管 Meteor 本身使用了 SockJS,但它是在 ddp 包中的 hidden deeply,并且它并没有真正暴露给用户。所以基本上,你有两个选择:

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

    如果您使用的是 3rd 方服务,那么第二种解决方案当然没有意义。第一种方案感觉很丑,因为数据冗余,但如果2.不可接受,恐怕这是唯一的出路。

    【讨论】:

    • 这解释了很多。我最终通过将 SockJS (sockjs-client-node) 的第二个副本添加到我的包中来使用选项 #1,然后我能够使用 SockJS 连接到第 3 方服务。同意这是一个丑陋的解决方案,SockJS 应该暴露在 Meteor 中。感谢您的帮助!
    • 这是否意味着您可以使用 SockJS 的第二个实例在 Meteor 和第 3 方之间进行对话?
    • 是的,我能够使用套接字库的第二个实例将 Metero 连接到第 3 方。你可以使用任何你想要的套接字库。
    【解决方案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“client”包,因为 sockjs-client 包是特定于浏览器的。所以我从 CDN 下载了提供的“echo”输出,我在我的测试环境中使用了“--exclude-archs web.browser.legacy”,但是从我在那里读出的内容中,如果你不这样做,sockjs-client 包是可用的'不要使用它这个参数。 Sockjs 依赖于“faye-websocket”,它有一个客户端和一个 websocket 服务器,设计用于在 NodeJs 上运行,这里是建议。

    Ps:我在客户端没有找到等价的表单(没有Npm.require)

    【讨论】:

      猜你喜欢
      • 2023-03-17
      • 1970-01-01
      • 2020-02-25
      • 2023-02-19
      • 1970-01-01
      • 2016-06-08
      • 2014-09-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多