Вы знаете, что на этом этапе цепочка управляемых блоков Amazon находится в предварительном просмотре и доступна только в 1 регионе us-east-1. AWS разрешает использовать только одну сеть для каждой учетной записи AWS. Смотрите ограничения, выделенные AWS. известные-проблемы-ограничения
Availability is limited to us-east-1.
Hyperledger Fabric is the only supported blockchain framework.
The maximum number of networks per AWS account is 1.
The maximum number of networks that an AWS account can be a member of is 1.
The maximum number of members per network is 5.
The maximum number of peer nodes per member is 1.
Peer nodes are limited to the bc.t3.small instance type.
Вместо использования create-network (поскольку вы не можете создать более одной сети в одной учетной записи AWS), вам необходимо использовать команду create-member в AWS CLI. Вот ОПИСАНИЕ команды create-member.
NAME
create-member -
DESCRIPTION
Creates a member within the blockchain network.
See also: AWS API Documentation
See 'aws help' for descriptions of global parameters.
SYNOPSIS
create-member
[--client-request-token ]
--network-id
--member-configuration
[--cli-input-json ]
[--generate-cli-skeleton ]
OPTIONS
--client-request-token (string)
An idempotency token. Set to an arbitrary unique value.
--network-id (string)
The unique identifier of the network in which the member is created.
--member-configuration (structure)
Member configuration parameters.
Shorthand Syntax:
Name=string,Description=string,FrameworkConfiguration={Fabric={AdminUsername=string,AdminPassword=string}}
JSON Syntax:
{
"Name": "string",
"Description": "string",
"FrameworkConfiguration": {
"Fabric": {
"AdminUsername": "string",
"AdminPassword": "string"
}
}
}
--cli-input-json (string) Performs service operation based on the JSON
string provided. The JSON string follows the format provided by --gen-
erate-cli-skeleton. If other arguments are provided on the command
line, the CLI values will override the JSON-provided values. It is not
possible to pass arbitrary binary values using a JSON-provided value as
the string will be taken literally.
--generate-cli-skeleton (string) Prints a JSON skeleton to standard
output without sending an API request. If provided with no value or the
value input, prints a sample input JSON that can be used as an argument
for --cli-input-json. If provided with the value output, it validates
the command inputs and returns a sample output JSON for that command.
See 'aws help' for descriptions of global parameters.
OUTPUT
MemberId -> (string)
The unique identifier of the member.
Кроме того, вы можете использовать панель управления управляемой цепочкой блоков aws, чтобы добавить участника в существующую сеть. Смотрите прикрепленный скриншот.
Некоторые библиотеки сокета позволяют Вам конкретно отклонять входящие соединения. Например: CommonC GNU ++: Класс TCPsocket имеет метод отклонения.
Сокеты BSD не имеют этой функциональности. Можно принять соединение и затем сразу закрыть его при оставлении сокета открытым:
while (running) {
int i32ConnectFD = accept(i32SocketFD, NULL, NULL);
while (noConnectionsPlease) {
shutdown(i32ConnectFD, 2);
close(i32ConnectFD);
break;
}
}
На базовом уровне сокеты или открыты или закрываются (мы проигнорируем тонкости диаграммы состояний TCP/IP здесь).
Если Ваш сокет закрывается, то ничто не может отправить данные в него. Если это будет открыто, то входящие данные будут приняты и подтверждены стеком TCP/IP, пока это не буферизует крики алгоритма "достаточно!". В той точке не будут подтверждены дальнейшие данные.
У Вас есть два варианта, которые я вижу. Любое завершение () сокет, когда Вы хотите "не послушать", и вновь открыть его позже - Использование setsockopt () с флагом SO_REUSEADDR, чтобы позволить Вам снова переплетать к закрепленному порту перед TIME_WAIT2, истекает.
Другой выбор состоит в том, чтобы сохранить сокет открытым, но просто не принять () от него, в то время как Вы 'заняты'. Принятие Вас имеет прикладной уровень, подтверждают к запросам, Вы, подсистема балансировки нагрузки поняла бы, что это не получает ответ и действие соответственно.
После закрытия сокета Ваши программы могут все еще сказать Вам, что сокет используется, это из-за некоторого weirdiness, о котором я не знаю точно. Но страница справочника о сокетах показывает Вам существует флаг, чтобы снова использовать тот же сокет, лениво названный: "SO_REUSEADDR". Установите его с помощью "setsockopt ()".
Нет никакого явного метода для неслушания!
Вы можете также close(fd)
или shutdown(fd, how)
fd is the socket file descriptor you want to shutdown, and how is one of the following:
0 Further receives are disallowed
1 Further sends are disallowed
2 Further sends and receives are disallowed (like close())
На основе Вашей отредактированной версии вопроса я не уверен, что необходимо "не послушать" или закрыться (). Две опции приходят на ум:
1) После вызова, слушают (), соединения на самом деле не приняты, до (достаточно логически) Вы звоните, принимают (). Можно "не послушать" путем простого игнорирования действия сокета, и задержка любого принимает (), пока Вы не готовы к ним. Любое входящее соединение делает попытку отставания на очередь, которая была создана, когда порт был открыт в режиме прослушивания. После того как неудовлетворенная очередь полна в стеке, дальнейшие попытки подключения просто отбрасываются на полу. То, когда Вы возобновляетесь с, принимает (), Вы быстро исключите отставание из очереди и будете готовы к большему количеству соединений.
2) Если Вы действительно хотите, чтобы порт казался полностью закрытым временно, Вы могли бы динамично применить фильтр пакетов уровня ядра к порту для препятствования попыткам входящего соединения достигнуть сетевого стека. Например, Вы могли использовать Фильтр пакетов Беркли (BPF) на большинстве *, отклоняют платформы. Это - Вы, хотят отбросить входящие пакеты, входящие к порту интереса, использующего функции брандмауэра платформы. Это, конечно, варьируется платформой, но является возможным подходом.
Вот довольно ужасный подход на основе Вашего отредактированного вопроса:
Откройте сокет для слушания с нормальным отставанием. Продолжить двигаться.
Когда Вы хотите "закрыть", открыть 2-й с отставанием 1 и SO_REUSEADDR. Закройте первый. Когда готовый для возобновления сделайте другой фокус сокета одному с нормальным отставанием.
Придирчивые детали вокруг дренажа принять очереди от сокета, который Вы закрываете, будут уничтожителем здесь. Вероятно, действительно уничтожитель для создания этого подхода нежизнеспособным.
Не думаю, что это хорошая идея, но ...
Вы могли бы позвонить послушать во второй раз. Спецификация POSIX не запрещает этого. Возможно, вы могли бы вызвать это второй раз с параметром невыполненной работы, равным 0, когда вы хотите «отменить прослушивание».
Что происходит при вызове listen с невыполненной работой, равной 0, похоже, определяется реализацией. В спецификации POSIX говорится, что может разрешить прием соединений, что подразумевает, что некоторые реализации могут отклонять все соединения, если параметр невыполненной работы равен 0. Однако более вероятно, что ваша реализация выберет некоторое положительное значение при передаче. 0 (возможно, 1 или SOMAXCONN).
Я не думаю, что это хороший способ сигнализировать балансировщику нагрузки. Он должен будет фактически отправить несколько соединений на ваш сервер, прежде чем сообщение дойдет до вас - эти соединения, вероятно, будут отклонены.
Аналогично, все соединения, которые были в ожидании, когда вы закрыли прослушивающий сокет, будут закрыты без данных.
Если вы хотите подать сигнал вышестоящему балансировщику нагрузки, у вас должен быть протокол для этого. Не пытайтесь злоупотреблять TCP для этого.
К счастью, если клиентами являются обычные веб-браузеры, вам многое может сойти с рук - простое закрытие сокетов обычно приводит к их повторным попыткам прозрачно для пользователя (до определенного момента).