Как создать много (я имею в виду много) сокетов в Linux?

Здесь шаблон быстрого запуска по умолчанию для добавления ВМ с пробной версией McAfee. Вы можете использовать его для дальнейшей обработки

Файл шаблона

{
  "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "newStorageAccountName": {
      "type": "string",
      "metadata": {
        "description": "Storage Account Name"
      }
    },
    "publicIPAddressName": {
      "type": "string",
      "metadata": {
        "description": "Public IP Address Name"
      }
    },
    "publicIPAddressType": {
      "type": "string",
      "defaultValue": "Dynamic",
      "allowedValues": [
        "Dynamic"
      ],
      "metadata": {
        "description": "Public IP Address Type"
      }
    },
    "vmName": {
      "type": "string",
      "metadata": {
        "description": "Name of the VM"
      }
    },
    "vmSize": {
      "type": "string",
      "defaultValue": "Standard_D3",
      "metadata": {
        "description": "Size of the VM"
      }
    },
    "imagePublisher": {
      "type": "string",
      "defaultValue": "MicrosoftWindowsServer",
      "metadata": {
        "description": "Image Publisher"
      }
    },
    "imageOffer": {
      "type": "string",
      "defaultValue": "WindowsServer",
      "metadata": {
        "description": "Image Offer"
      }
    },
    "imageSKU": {
      "type": "string",
      "defaultValue": "2012-R2-Datacenter",
      "metadata": {
        "description": "Image SKU"
      }
    },
    "adminUsername": {
      "type": "string",
      "metadata": {
        "description": "Admin username"
      }
    },
    "adminPassword": {
      "type": "securestring",
      "metadata": {
        "description": "Admin password"
      }
    },
    "virtualNetworkName": {
      "type": "string",
      "metadata": {
        "description": "VNET Name"
      }
    },
    "addressPrefix": {
      "type": "string",
      "defaultValue": "10.0.0.0/16",
      "metadata": {
        "description": "VNET address space"
      }
    },
    "subnet1Name": {
      "type": "string",
      "defaultValue": "Subnet-1",
      "metadata": {
        "description": "Subnet 1 name"
      }
    },
    "subnet1Prefix": {
      "type": "string",
      "defaultValue": "10.0.0.0/24",
      "metadata": {
        "description": "Subnet 1 address space"
      }
    },
    "nicName": {
      "type": "string",
      "metadata": {
        "description": "Name of the NIC"
      }
    },
    "vmExtensionName": {
      "type": "string",
      "metadata": {
        "description": "Extension name"
      }
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]",
      "metadata": {
        "description": "Location for all resources."
      }
    }
  },
  "variables": {
    "vnetID": "[resourceId('Microsoft.Network/virtualNetworks',parameters('virtualNetworkName'))]",
    "subnet1Ref": "[concat(variables('vnetID'),'/subnets/',parameters('subnet1Name'))]",
    "storageAccountType": "Standard_LRS"
  },
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "name": "[parameters('newStorageAccountName')]",
      "apiVersion": "2015-05-01-preview",
      "location": "[parameters('location')]",
      "properties": {
        "accountType": "[variables('storageAccountType')]"
      }
    },
    {
      "apiVersion": "2015-05-01-preview",
      "type": "Microsoft.Network/publicIPAddresses",
      "name": "[parameters('publicIPAddressName')]",
      "location": "[parameters('location')]",
      "properties": {
        "publicIPAllocationMethod": "[parameters('publicIPAddressType')]"
      }
    },
    {
      "apiVersion": "2015-05-01-preview",
      "type": "Microsoft.Network/virtualNetworks",
      "name": "[parameters('virtualNetworkName')]",
      "location": "[parameters('location')]",
      "properties": {
        "addressSpace": {
          "addressPrefixes": [
            "[parameters('addressPrefix')]"
          ]
        },
        "subnets": [
          {
            "name": "[parameters('subnet1Name')]",
            "properties": {
              "addressPrefix": "[parameters('subnet1Prefix')]"
            }
          }
        ]
      }
    },
    {
      "apiVersion": "2015-05-01-preview",
      "type": "Microsoft.Network/networkInterfaces",
      "name": "[parameters('nicName')]",
      "location": "[parameters('location')]",
      "dependsOn": [
        "[concat('Microsoft.Network/publicIPAddresses/', parameters('publicIPAddressName'))]",
        "[concat('Microsoft.Network/virtualNetworks/', parameters('virtualNetworkName'))]"
      ],
      "properties": {
        "ipConfigurations": [
          {
            "name": "ipconfig1",
            "properties": {
              "privateIPAllocationMethod": "Dynamic",
              "publicIPAddress": {
                "id": "[resourceId('Microsoft.Network/publicIPAddresses',parameters('publicIPAddressName'))]"
              },
              "subnet": {
                "id": "[variables('subnet1Ref')]"
              }
            }
          }
        ]
      }
    },
    {
      "apiVersion": "2017-03-30",
      "type": "Microsoft.Compute/virtualMachines",
      "name": "[parameters('vmName')]",
      "location": "[parameters('location')]",
      "dependsOn": [
        "[concat('Microsoft.Storage/storageAccounts/', parameters('newStorageAccountName'))]",
        "[concat('Microsoft.Network/networkInterfaces/', parameters('nicName'))]"
      ],
      "properties": {
        "hardwareProfile": {
          "vmSize": "[parameters('vmSize')]"
        },
        "osProfile": {
          "computerName": "[parameters('vmName')]",
          "adminUsername": "[parameters('adminUsername')]",
          "adminPassword": "[parameters('adminPassword')]"
        },
        "storageProfile": {
          "imageReference": {
            "publisher": "[parameters('imagePublisher')]",
            "offer": "[parameters('imageOffer')]",
            "sku": "[parameters('imageSKU')]",
            "version": "latest"
          },
          "osDisk": {
            "name": "[concat(parameters('vmName'),'_OSDisk')]", 
            "caching": "ReadWrite",
            "createOption": "FromImage"
          }
        },
        "networkProfile": {
          "networkInterfaces": [
            {
              "id": "[resourceId('Microsoft.Network/networkInterfaces',parameters('nicName'))]"
            }
          ]
        }
      }
    },
    {
      "type": "Microsoft.Compute/virtualMachines/extensions",
      "name": "[concat(parameters('vmName'),'/', parameters('vmExtensionName'))]",
      "apiVersion": "2015-05-01-preview",
      "location": "[parameters('location')]",
      "dependsOn": [
        "[concat('Microsoft.Compute/virtualMachines/', parameters('vmName'))]"
      ],
      "properties": {
        "publisher": "McAfee.EndpointSecurity",
        "type": "McAfeeEndpointSecurity",
        "typeHandlerVersion": "6.0",
        "settings": {
          "featureVS": "true",
          "featureBP": "true",
          "featureFW": "true",
          "relayServer": "false"
        },
        "protectedSettings": null
      }
    }
  ]
}

Вы сможете увидеть узел расширения ВМ в нижней части шаблона.

Также, пожалуйста, найдите список параметров для того же самого.

{
  "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "newStorageAccountName": {
      "value": "GEN-UNIQUE-8"
    },
    "publicIPAddressName": {
      "value": "GEN-UNIQUE-8"
    },
    "publicIPAddressType": {
      "value": "Dynamic"
    },
    "vmName": {
      "value": "GEN-UNIQUE-8"
    },
    "vmSize": {
      "value": "Standard_D3"
    },
    "adminUsername": {
      "value": "GEN-UNIQUE"
    },
    "adminPassword": {
      "value": "GEN-PASSWORD"
    },
    "virtualNetworkName": {
      "value": "GEN-VNET-NAME"
    },
    "nicName": {
      "value": "GEN-UNIQUE-8"
    },
    "vmExtensionName": {
      "value": "GEN-UNIQUE-8"
    }
  }
}

Вы можете визуализировать это здесь:

http://armviz.io/#/ ? load = https% 3A% 2F% 2Fraw.githubusercontent.com% 2FAzure% 2Fazure-quickstart-templates% 2Fmaster% 2Fmcafee-extension-windows-vm% 2Fazuredeploy.json

Надеюсь, это поможет. [ 1115]

6
задан Eddie 18 April 2009 в 02:20
поделиться

6 ответов

Старая шутка: Человек идет к врачу, говорит: «Доктор, мне больно, когда я делаю это , «скручивая его руку в странное положение.

Доктор отвечает:« Ну, не делайте этого! »

Посмотрите, что вы делаете, это очень ] неестественный процесс. Для установления соединения TCP требуется квитирование, передача байтов далеко сверх одного байта на сообщение. Время установки и демонтажа будет значительным. Очень вероятно, что вы используете ресурсы ядра, связанные с этим рукопожатием; Конечно, если вы оставите это в покое и перестанете шлепать, оно в конечном итоге догонит.

Итак, что вы действительно пытаетесь измерить? Что вы действительно пытаетесь сделать ? Если ты' действительно пытаемся послать один байт за раз - боги запрещают - по крайней мере, подумайте об использовании udp; Там нет ужасной настройки / демонтажа. Это все еще чрезвычайно неэффективно по сравнению с издержками - даже пакет UDP требует примерно 20 байтов кадрирования - но это лучше.

9
ответ дан 8 December 2019 в 04:31
поделиться

Подключение и отправка 1 байта не является эталоном чего-либо, кроме, возможно, самого протокола TCP. Как сказал выше Чарли Мартин, большую часть времени тратится впустую на подключение, а затем на отключение сокета.

Я понимаю, что вы ХОТИТЕ оценить, но действительно ли это хорошее представление о том, что делает ваше приложение? Вы действительно собираетесь устанавливать соединение только для отправки 1 байта?

1
ответ дан 8 December 2019 в 04:31
поделиться

Возьмите взгляните на статью Ричарда Джонса Приложение Comet для миллиона пользователей с Mochiweb, часть 3 . Речь идет о реализации приложения Comet на Erlang, но в разделе «Увеличение числа до 1 миллиона» описывается, как он тестировал свой сервер; он открывается заявлением «Создание миллиона TCP-соединений с одного хоста нетривиально». Это должно дать вам некоторое представление о том, что вас ждет.

7
ответ дан 8 December 2019 в 04:31
поделиться

Возможно, у вас закончились порты? Вы получаете только 5000 - 1024 порта, если не хотите вызывать bind () в цикле, чтобы найти следующий свободный порт.

bind () с 0 для порта возвращает свободный порт в диапазоне 1024-5000. bind () с указанным портом получает этот порт, если он доступен.

int bindnextport(int s, struct sockaddr sa)  
{  
   static int nextport = 1025;  
   int lastport;  
   lastport = nextport;  
   do {  
      sa.sa_data[0] = nextport >> 8;  
      sa.sa_data[1] = nextport & 255;  
      if (!bind(s, &sa, sizeof(sa))  
         return 0;  
      ++nextport;  
      if (nextport >= 65536) nextport = 1024;  
   } while (lastport != nextport);  
   return 1;  
}
2
ответ дан 8 December 2019 в 04:31
поделиться

Вы пробовали установить флаг SO_REUSEADDR на сокете?

5
ответ дан 8 December 2019 в 04:31
поделиться

http-сервер nginx утверждает, что он может поддерживать 10 000 неактивных HTTP-соединений поддержки активности. Вы можете взглянуть на то, как они делают это .

1
ответ дан 8 December 2019 в 04:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: