Comunicazioni di rete

Le app di Chrome possono fungere da client di rete per le connessioni TCP e UDP. Questo documento illustra come utilizzare TCP e UDP per inviare e ricevere dati sulla rete. Per ulteriori informazioni, consulta la sezione Socket API UDP, TCP e Server TCP Sockets.

Requisiti dei file manifest

Per le app di Chrome che utilizzano TCP o UDP, aggiungi la voce sockets al manifest e specifica l'IP regole di autorizzazione dell'endpoint. Ad esempio:

"sockets": {
    "udp": {
      "send": ["host-pattern1", ...],
      "bind": ["host-pattern2", ...],
      ...
    },
    "tcp" : {
      "connect": ["host-pattern1", ...],
      ...
    },
    "tcpServer" : {
      "listen": ["host-pattern1", ...],
      ...
    }
  }

La sintassi del socket "host-pattern" le voci seguono queste regole:

<host-pattern> := <host> | ':' <port> | <host> ':' <port>
<host> := '*' | '*.' <anychar except '/' and '*'>+
<port> := '*' | <port number between 1 and 65535>)

Per una descrizione dettagliata della sintassi, consulta Chiave manifest socket.

Esempi di voci manifest socket:

  • { "tcp": { "connect" : "*:23" } }: connessione sulla porta 23 di qualsiasi host
  • { "tcp": { "connect" : ["*:23", "*:80"] } }: connessione sulla porta 23 o 80 di qualsiasi host
  • { "tcp": { "connect" : "www.example.com:23" } }: porta 23 di www.example.com
  • { "tcp": { "connect" : "" } }: collegamento delle porte di qualsiasi host
  • { "udp": { "send" : ":99" } }: invio di pacchetto UDP alla porta 99 di qualsiasi host
  • { "udp": { "bind" : ":8899" } }: associazione della porta locale 8899 per ricevere pacchetti UDP
  • { "tcpServer": { "listen" : ":8080" } }: TCP in ascolto sulla porta locale 8080

Utilizzo di TCP

Le app di Chrome possono stabilire connessioni a qualsiasi servizio che supporti TCP.

Collegamento a una presa

Ecco un esempio che mostra come connettersi (sockets.tcp.connect) a un socket:

chrome.sockets.tcp.create({}, function(createInfo) {
  chrome.sockets.tcp.connect(createInfo.socketId,
    IP, PORT, onConnectedCallback);
});

Mantieni un handle a socketId per poter ricevere e inviare dati in un secondo momento (sockets.tcp.send) a questo socket.

Ricezione e invio su un socket

La ricezione da (sockets.tcp.onReceive) e l'invio a un socket utilizzano gli oggetti Arraybu. A scopri di più su ArrayBuffers, dai un'occhiata alla panoramica, agli array di caratteri JavaScript e al tutorial Come convertire Arraybu in e da una stringa.

chrome.sockets.tcp.send(socketId, arrayBuffer, onSentCallback);
chrome.sockets.tcp.onReceive.addListener(function(info) {
  if (info.socketId != socketId)
    return;
  // info.data is an arrayBuffer.
});

Disconnettersi da una presa

Ecco come disconnettere (sockets.tcp.disconnect):

chrome.sockets.tcp.disconnect(socketId);

Utilizzo di UDP

Le app di Chrome possono stabilire connessioni a qualsiasi servizio che supporta UDP.

Invio di dati in corso...

Ecco un esempio che mostra come inviare dati (sockets.udp.send) sulla rete utilizzando UDP:

// Create the Socket
chrome.sockets.udp.create({}, function(socketInfo) {
  // The socket is created, now we can send some data
  var socketId = socketInfo.socketId;
  chrome.sockets.udp.send(socketId, arrayBuffer,
    '127.0.0.1', 1337, function(sendInfo) {
      console.log("sent " + sendInfo.bytesSent);
  });
});

Ricezione di dati

Questo esempio è molto simile a "Invio dei dati in corso" Ad esempio, abbiamo configurato un gestore di eventi che ricevono dati.

var socketId;

// Handle the "onReceive" event.
var onReceive = function(info) {
  if (info.socketId !== socketId)
    return;
  console.log(info.data);
};

// Create the Socket
chrome.sockets.udp.create({}, function(socketInfo) {
  socketId = socketInfo.socketId;
  // Setup event handler and bind socket.
  chrome.sockets.udp.onReceive.addListener(onReceive);
  chrome.sockets.udp.bind(socketId,
    "0.0.0.0", 0, function(result) {
      if (result < 0) {
        console.log("Error binding socket.");
        return;
      }
      chrome.sockets.udp.send(socketId, arrayBuffer,
        '127.0.0.1', 1337, function(sendInfo) {
          console.log("sent " + sendInfo.bytesSent);
      });
  });
});

Utilizzo del server TCP

Le app di Chrome possono fungere da server TCP utilizzando l'API sockets.tcpServer.

Creazione di un socket del server TCP

Crea un socket del server TCP con sockets.tcpServer.create.

chrome.sockets.tcpServer.create({}, function(createInfo) {
  listenAndAccept(createInfo.socketId);
});

Accettazione delle connessioni client in corso

Ecco un esempio che mostra come accettare connessioni (sockets.tcpServer.listen) su un server TCP socket:

function listenAndAccept(socketId) {
  chrome.sockets.tcpServer.listen(socketId,
    IP, PORT, function(resultCode) {
      onListenCallback(socketId, resultCode)
  });
}

Mantieni un handle per socketId per poter accettare nuove connessioni in un secondo momento (sockets.tcpServer.onAccept) .

var serverSocketId;
function onListenCallback(socketId, resultCode) {
  if (resultCode < 0) {
    console.log("Error listening:" +
      chrome.runtime.lastError.message);
    return;
  }
  serverSocketId = socketId;
  chrome.sockets.tcpServer.onAccept.addListener(onAccept)
}

Quando viene stabilita una nuova connessione, onAccept viene richiamato con il clientSocketId del nuovo TCP connessione. L'ID socket client deve essere utilizzato con l'API sockets.tcp. La presa del nuovo la connessione è in pausa per impostazione predefinita. Riattivalo con sockets.tcp.setPaused per iniziare a ricevere e i dati di Google Cloud.

function onAccept(info) {
  if (info.socketId != serverSocketId)
    return;

  // A new TCP connection has been established.
  chrome.sockets.tcp.send(info.clientSocketId, data,
    function(resultCode) {
      console.log("Data sent to new TCP client connection.")
  });
  // Start receiving data.
  chrome.sockets.tcp.onReceive.addListener(function(recvInfo) {
    if (recvInfo.socketId != info.clientSocketId)
      return;
    // recvInfo.data is an arrayBuffer.
  });
  chrome.sockets.tcp.setPaused(false);
}

Interrompi l'accettazione di connessioni client

Chiama sockets.tcp.disconnect sull'ID socket del server per interrompere l'accettazione di nuove connessioni.

chrome.sockets.tcpServer.onAccept.removeListener(onAccept);
chrome.sockets.tcpServer.disconnect(serverSocketId);