如何在同一页面上连接两次GoInstant?

时间:2013-10-27 09:40:31

标签: javascript goinstant

这是我的代码的基本结构:

var url = "https://goinstant.net/Something/SomethingElse";
goinstant.connect(url, function (err, connection, lobby) {
  var something = lobby.key("something");
  // and also some other stuff
});

然后,在另一个脚本文档中,但仍然在同一页面上:

var url = "https://goinstant.net/Something/SomethingElse";
goinstant.connect(url, function (err, connection, lobby) {
  var something = lobby.key("something");
  // and also some other stuff
});

基本完全相同的交易。除了现在谷歌Chrome给我这些错误:

WebSocket connection to 'wss://goinstant.net/engine.io/?acct=Something&app=SomethingElse&jwt=UtAhSf3vmpLNcT0…6MDbfhLZN3G4jNqmMQQjlnl&EIO=2&transport=websocket&sid=9yQO6vVBI1syXlsxAAhJ' failed: WebSocket is closed before the connection is established. platform.min.js:3
Uncaught TypeError: Cannot call method 'key' of undefined 

我该如何解决这个问题?我删除了第二位代码,一切正常。

更新:现在我正在使用已批准的答案代码:

var url = "https://goinstant.net/Something/SomethingElse";
var opts = {sessionId: "", guestId: ""};
goinstant.connect(url, opts, function (err, connection, lobby) {
  var something = lobby.key("something");
  // and also some other stuff
});

但由于某种原因,它仍然无效。它显示了相同的错误,还有一些Access-Control-Allow-Origin尝试通过http转到GoInstant的服务器。

另一个更新:我复制了答案的代码,然后它似乎工作正常。但我所做的就是:

我打开了大约20个Google Chrome标签页,所有标签都有相同的测试页。

前5个工作,最后15个工作没有,与之前相同的websocket错误,以及key not defined的内容。

我知道我开始讨厌,但我该如何解决这个问题?

1 个答案:

答案 0 :(得分:4)

在`goinstant.connect'的optionsObject parameter上使用未记录的sessionIdguestId属性:

var url = "https://goinstant.net/ACCOUNT/APPLICATION";
var opts = {sessionId: null, guestId: null};

var conn1, lobby1, conn2, lobby2;

goinstant.connect(url, opts, function(err, connection, lobby) {
  conn1 = connection;
  lobby1 = lobby;

  lobby.key('conn2Key').on('set', function(value, context) {
    console.log('-----------------------');
    console.log('Saw a set on conn2Key');
    console.log('User:', context.userId);
    console.log('Value:', value);
    console.log('This connection is user:', lobby.self().name.split('/')[2]);
    console.log('-----------------------');
  });
});

goinstant.connect(url, opts, function(err, connection, lobby) {
  conn2 = connection;
  lobby2 = lobby;

  setTimeout(function() {
    lobby.key('conn2Key').set('Hi!');
  }, 1000);
});

当设置为空字符串或null时,连接将为连接生成新的访客用户和会话。

默认情况下,GoInstant应用程序中的访客用户信息在选项卡之间共享,会话在选项卡中重复使用(因此,如果您重新加载,则可以正确重新连接)。这就是使用两个实例中断的原因;相同的sessionId尝试连接两次。

此功能未记录且不受支持,因此将来可能会更改或中断。