2

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

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
});

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

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 个谷歌浏览器标签,所有标签都具有相同的测试页面。

前 5 个有效,后 15 个无效,与以前相同的 websocket 错误,还有一些关于key not defined.

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

4

1 回答 1

3

在`goinstant.connect'的optionsObject 参数上使用未记录的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尝试连接两次。

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

于 2013-10-27T14:17:02.280 回答