在Chrome应用程序不能取消TCP服务器的TCP连接

In a Chrome app cannot unpause TCP connection for TCP server

本文关键字:TCP 服务器 连接 取消 Chrome 应用程序 不能      更新时间:2023-09-26

我正试图在Chrome应用程序中设置TCP服务器。我非常接近完成。我可以从我的TCP服务器向我的客户端发送数据。但是我无法处理客户端发来的数据。我发现套接字暂停了。问题是,我似乎无法取消暂停。

如果我在JavaScript控制台中尝试:

chrome.sockets.tcp.getSockets(function(d) {console.log(d);});

我得到这样的结果:

[Object]
  0: Object
    connected: true
    localAddress: "127.0.0.1"
    localPort: 60519
    paused: true
    peerAddress: "127.0.0.1"
    peerPort: 36529
    persistent: false
    socketId: 11
    length: 1

然后我取消暂停,对吧?这样的:

chrome.sockets.tcpServer.setPaused(
  socketID, false, function () {
    console.log('unpaused');
   }
);

实际上我的回调是运行的:

unpaused

但是如果我再次检查

chrome.sockets.tcp.getSockets(function(d) {console.log(d);});

I still get:

[Object]
  0: Object
    connected: true
    localAddress: "127.0.0.1"
    localPort: 60519
    paused: true
    peerAddress: "127.0.0.1"
    peerPort: 36529
    persistent: false
    socketId: 11
    length: 1

对于setpause调用中的socketID值,我使用了Chrome为socketID和clientSocketID提供的值。

编辑:

我也试过getInfo():

chrome.sockets.tcpServer.getInfo(19, function (d) {console.log(d);});

让我大吃一惊的是:

Object {
  localAddress: "127.0.0.1",
  localPort: 60519,
  paused: false,
  persistent: false,
  socketId: 19
}

getSockets()仍然表示套接字已暂停。套接字仍未接收消息。我很困惑。

为了完整起见,下面是我处理消息的方法:

Package.MyClass.prototype.onAccept = function(info) {
  console.log('accept info', info);
  if (info.socketId !== this.serverSocketId) { return;}
  console.log('Socket ID is correct.'); // This gets printed every time.
  // Start receiving data.
  chrome.sockets.tcp.onReceive.addListener(this.onReceive.bind(this));
  chrome.sockets.tcpServer.setPaused(this.serverSocketId, false);
}

我可以告诉onAccept()被调用时,客户端连接到套接字:控制台日志显示。但是onReceive也从调用console.log开始,并且永远不会显示。

编辑:解决:

我找到了一个解决方法:我使用这个脚本:https://github.com/GoogleChrome/chrome-app-samples/blob/master/tcpserver/tcp-server.js

它做我需要的一切,它更容易使用和配置

正如我在最后的编辑中提到的,我找到了一个解决方法:我使用这个脚本:https://github.com/GoogleChrome/chrome-app-samples/blob/master/tcpserver/tcp-server.js

它做了我需要的一切,它更容易使用和配置。

似乎内置的TCP服务器不像当前版本的Chrome, Chrome 34.