Haute performance asynchrone en attente de sockets

Je suis en train d'écrire une application qui nécessitera de faire des centaines de connexions socket tcp pour lire/écrire des données.

Je suis venu à travers cet extrait de code ici et je me demande comment je peux le rendre plus robuste.

Présentement, c'est comment je vais appeler le code:

foreach (var ip in listofIps)
{
   IPEndPoint remoteEP = new IPEndPoint(IPAddress.Parse(ip), 4001);
   Socket client = new Socket(AddressFamily.InterNetwork,
                           SocketType.Stream, ProtocolType.Tcp);
   client.Connect(remoteEP);
   await ReadAsync(client);
}
  1. Il n'y a rien de mal avec le ci-dessus, et comment peut-il être optimisé tel qu'il fonctionne en même temps?

    Dans l'extrait de code, la taille de la mémoire tampon est fixé à 1000. Tout comme une simple illustration, si je devais tenter d'imprimer uniquement les octets reçus, et pas le reste 0x00s, je dois faire quelque chose comme ceci:

    while (true)
    {
        await s.ReceiveAsync(awaitable);
        int bytesRead = args.BytesTransferred;
        if (bytesRead <= 0) break;
        var hex = new StringBuilder(bytesRead * 2);
        var msg = new byte[bytesRead];
    
        for (int i = 0; i < bytesRead; i++)                
            msg[i] = args.Buffer[i];                
    
        foreach (byte b in msg)                
            hex.AppendFormat("{0:x2} ", b);
    
        AppendLog(string.Format("RX: {0}", hex));
    }
  2. Est-il un moyen plus efficace de faire cela? Auparavant, je voudrais réitérer la totalité de la mémoire tampon et d'imprimer les données, mais qui me donnera tout un tas de fuite 0x00s que mon protocole est n'importe où entre 60 à 70 octets de long.
Vous ne pouvez pas obtenir beaucoup de réponses à cette question car elle est trop large et vous vous demandez comme " peut-il être optimisé?'. La réponses est généralement un oui retentissant.
J'ai fait état les domaines que je voulais qu'il soit optimisé. Je ne pense pas que la question est plus large que vous le faire sonner. Je n'ai pas demandé "cela peut-il être optimisé?" en général
Mais vous demandé à trois ou quatre questions qui ne sont pas directement liées. Vous devriez vous poser une seule question à la fois.
Ce code est actuellement en attente de chaque tour - plutôt que de le faire simultanément. Est-ce vraiment votre intention?
Je vous remercie pour cette. Je veux qu'ils exécutent en même temps, comment le code devrait-il être?

OriginalL'auteur Null Reference | 2013-06-13