Estou trabalhando no Ubuntu e estou escrevendo um servidor em c que usa a biblioteca do websocket, que funciona perfeitamente para conexões de websocket recebidas dos navegadores (eu usei javascript lá). Agora eu quero fazer alguns testes de desempenho e conectar muitos clientes falsos automatizados. Para isso eu queria escrever um programa que começou várias vezes e que se conecta a esse servidor. Para fazer isso, tentei o seguinte código: Agora, quando o servidor é iniciado e os falsos clientes tentam se conectar, eu só recebo o seguinte erro: Quando o servidor não foi iniciado, porém, nenhuma mensagem de erro aparece, então existe definitivamente algum tipo De conexão acontecendo. Mas não consigo descobrir o que estou fazendo de errado. É mesmo possível conectar facilmente 2 programas binários via websocket lib Para os melhores resultados de teste de desempenho, os websockets devem ser usados para comunicação entre o servidor e os clientes falsos, eu acho. Obrigado pela sua ajuda, Trocas de Opções Binárias com Opção de QI O que é opções binárias Em primeiro lugar, é uma ferramenta de negociação on-line altamente lucrativa que permite estimar antecipadamente o lucro potencial. Negociação de opções binárias pode trazer uma renda substancial no menor tempo possível. Traders compra opções a um preço predeterminado. Negociação on-line pode ser rentável se o comerciante identifica corretamente o movimento do mercado. Vantagens de negociação de opções binárias é uma área de alto risco onde você pode dobrar ou até mesmo triplicar seu capital ou perdê-lo em poucos minutos. Opções binárias têm várias vantagens que tornam possível obter mais lucro com risco previsível. Uma opção com um lucro fixo difere da negociação convencional. Iniciantes podem trocar opções binárias com IQ Option tão bem como comerciantes experientes. Todo o processo é totalmente automatizado. Os comerciantes das opções binárias estão cientes de seus lucros adiantado seu objetivo principal é selecionar a direção correta do movimento do mercado. Eles precisam escolher entre duas direções apenas para cima ou para baixo. Dois tipos de comércio on-line A plataforma IQ Option permite que você troque opções binárias em dois modos básicos. A conta da prática é para o treinamento. Para abrir uma conta prática e para testar sua força, você nem precisa fazer um depósito. Para negociação real, você precisa depositar 10 apenas. Isso garante um bônus de até 36. Ao abrir uma conta para um montante maior (de 3.000), um gerente de conta pessoal estará ao seu serviço. As operações de negociação oferecidas neste website podem ser consideradas Operações de Negociação de Alto Risco ea sua execução pode ser muito arriscada. Comprar instrumentos financeiros ou utilizar serviços oferecidos no site pode resultar em perdas significativas ou mesmo em uma perda total de todos os fundos em sua conta. É-lhe concedido direitos não-exclusivos não-transferíveis limitados para utilizar o IP fornecido neste website para fins pessoais e não comerciais em relação aos serviços oferecidos no Website apenas. A empresa atua fora da Federação Russa. Eu. iqoption é de propriedade e operado pela Iqoption Europe Ltd. IQ Option, 20132017 Informações de recuperação de senha foram enviadas com sucesso para o seu e-mail O registro não está disponível na Federação Russa. Se você acha que está vendo esta mensagem por engano, entre em contato com o suporte. Uso da biblioteca geral Um manipulador pode ser alterado após a conexão estar estabelecida. Pode ser removido Sim, mas não globalmente. Os manipuladores atribuídos aos pontos finais serão copiados automaticamente para as conexões criadas por esse ponto final. Alterar um manipulador em um ponto final só afetará conexões futuras. Uma vez que uma conexão particular é criada, seus manipuladores podem ser alterados individualmente chamando os métodos sethandler. Uma vez alterado, todos os eventos futuros desse tipo para essa conexão usarão o novo manipulador. Para remover um manipulador previamente configurado, chame o método definido com nullptr ou NULL. Posso rejeitar ou aceitar condicionalmente uma conexão Sim. O manipulador de validação é chamado depois que o handshake inicial foi recebido, mas antes que o WebSocket tenha respondido. Isso lhe dá a oportunidade de inspecionar a solicitação de conexão recebida, seus cabeçalhos, origem, subprotocolos e o IP do ponto final remoto. Retornar verdadeiro do manipulador de validação para aceitar a conexão e falso para rejeitá-lo. Para configurar uma mensagem de erro HTTP personalizada para sua rejeição, use websocketpp :: connection :: setstatus e (opcionalmente) websocketpp :: connection :: setbody () para definir o código de status HTTP e o texto do corpo da mensagem de erro. Se você não definir o texto do corpo, uma mensagem será gerada automaticamente com base no código de status. Como faço para negociar subprotocolos As conexões do WebSocket podem oferecer um subprotocolo específico que eles querem usar. O protocolo WebSocket não define o significado ou a interpretação do subprotocolo. Esta interpretação é deixada para os pontos finais de aplicativos individuais. Os servidores WebSocket podem ler os subprotocolos solicitados durante o manipulador de validação chamando websocketpp :: connection :: getrequestedsubprotocols. A lista é ordenada pela prioridade do cliente. Você pode opcionalmente escolher um desses subprotocolos com websocketpp :: connection :: selecttsubprotocol. O aperto de mão irá então completar e deixar o cliente saber qual deles foi escolhido. Se você não escolher nenhum, o subprotocolo blankemptynone será usado. Os clientes do WebSocket podem adicionar um subprotocolo a uma conexão de saída chamando o websocketpp :: connection :: addsubprotocol antes de ligar para o websocketpp :: client :: connect. A ordem de adição será interpretada como a ordem de preferência. Em ambos os caases, após a conexão ter sido estabelecida, o subprotocolo selecionado está disponível através do método websocketpp :: connection :: getsubprotocol. Nota: alguns navegadores permitirão que a conexão continue se eles solicitaram um subprotocolo e seu servidor não seleciona um. Outros rejeitarão a conexão. Como deixo de forma limpa um programa baseado em transporte Asio Os clientes e servidores baseados em transporte Asio usam as bibliotecas Asio subjacentes ioservice para lidar com operações de rede assíncronas. O comportamento padrão do ioservice deve ser executado até que não haja operações assíncronas à esquerda e, em seguida, retornar. O WebSocket, ao usar o transporte Asio, se comporta como um aplicativo Asio padrão. Se você deseja que seu programa baseado no WebSocketAsio pare as operações da rede e feche de forma limpa todos os soquetes, você quer fazer o seguinte: Para servidores, ligue para websocketpp :: transport :: asio :: endpoint :: stoplistening para iniciar o fechamento do soquete de escuta do servidor . Para clientes, se você contratou um modo perpétuo com o websocketpp :: transport :: asio :: endpoint :: startperpetual. Desativá-lo com websocketpp :: transport :: asio :: endpoint :: stopperpetual. Para ambos, execute o websocketpp :: endpoint :: close ou websocketpp :: connection :: close em todas as conexões atualmente pendentes. Isso iniciará o aperto de mão de encerramento do WebSocket para essas conexões Aguarde. Asio é assíncrono. Quando as chamadas para os métodos acima (stoplistening, fechar, etc.), o servidor ainda estará escutando. As conexões ainda estarão ativas até que o ioservice se mova para processar de forma assíncrona o soquete e o protocolo WebSocket apertando handshakes. O método ioservice :: run irá sair de forma limpa e automática quando todas as operações estiverem concluídas. ATENÇÃO . Asios ioservice possui um método chamado stop. O WebSocket envolve esse método como websocketpp :: transport :: asio :: endpoint :: stop. Embora esta operação tenha um nome de som benigno, é uma operação poderosa e destrutiva que só deve ser usada em casos especiais. Se você estiver usando ioservice :: stop ou endpoint :: stop sem um motivo muito bom, seu programa provavelmente está quebrado e pode exibir um comportamento errático. Especificamente, ioservice :: stop pára o processamento de eventos inteiramente. Isso não dá as operações atuais (como o encerramento de soquetes handshakes) a oportunidade de terminar. Ele deixará seus soquetes em um estado pendente que pode invocar o tempo limite do sistema operacional ou outros erros. Se o seu cliente usa o método startperpetual, ele impedirá o ioservice de sair mesmo que não tenha nada a ver. Isso é útil se você deseja que um ponto de extremidade do cliente seja ocioso no fundo para permitir que novas conexões sejam formadas sob demanda, em vez de gerar um novo nó de extremidade para cada um. Se você estiver usando um ioservice externo e estiver colocando operações não-WebSocket no ioservice, essas operações podem manter o ioservice aberto mesmo após todas as operações do WebSocket terem sido concluídas. Se você estiver usando pollone runone da enquete ou, de outra forma, dirigindo manualmente o ciclo do evento do ioservice, você precisará ajustar o uso para garantir que você esteja reconhecendo corretamente o feito com o trabalho e não feito, mas o ioservice :: casos de trabalho em marcha lenta. Existe uma maneira de verificar a validade de um connectionhdl Às vezes, geralmente não, porque não existe uma maneira de verificar se uma conexão TCP é válida. Você pode tentar atualizar seu hdl para um connectionptr completo usando o websocketpp :: endpoint :: getconfromhdl. Se isso falhar, o hdl definitivamente é inválido. Se for bem sucedido, pode ou não ser. A única maneira de dizer definitivamente é tentar e enviar algo (uma mensagem ou um ping). Se você lidar com erros de métodos como enviar, fazer ping, fechar, etc corretamente, então você não precisa se preocupar em enviar acidentalmente conexões mortas. Os métodos sendpingpongclose definem ou lançam um erro específico no caso de você tentar enviar algo, mas a conexão foi closedgoneetc. Como faço para corrigir o endereço está em uso erro ao tentar reiniciar meu servidor Normalmente, por motivos de segurança, os sistemas operacionais impedem que os programas escutem soquetes criados por outros programas. Quando seu programa falha e reinicia, a nova instância é um programa diferente da perspectiva do sistema operacional. Como tal, não pode ouvir no endereço de endereço do soquete que o programa anterior estava usando até depois de um tempo limite ocorrer para se certificar de que o programa anterior foi feito com ele. O primeiro passo para lidar com isso é garantir que você forneça um método (manipulador de sinal, mensagem de administrador do websocket, etc.) para executar um desligamento do servidor limpo. Há uma pergunta em outro lugar neste FAQ que descreve as etapas necessárias para isso. A estratégia de limpeza fechada não ajudará no caso de falhas ou outros fechamentos anormais. Uma opção a considerar para esses casos é o uso da opção de soquete SOREUSEADDR. Isso instrui o sistema operacional a não solicitar um bloqueio exclusivo no soquete. Isso significa que, após o seu programa falhar, a substituição que você começa pode ouvir imediatamente nesse comboio addressport novamente. Observe . Como isso funciona, depende exatamente do seu sistema operacional. Além disso, não bloquear exclusivamente o seu soquete de escuta poderia permitir o seqüestro por outros programas se você estiver executando em um ambiente de recursos compartilhado. Para o desenvolvimento, isso geralmente não é problema. Para um ambiente de produção, pense cuidadosamente sobre o modelo de segurança. Websocketpp :: transport :: asio :: endpoint :: setreuseaddr é o método para fazer isso. Você deve especificar essa configuração antes de ligar para o websocketpp :: transport :: asio :: endpoint :: listen. Como envio e recebo mensagens binárias Quando suportado pelo ponto final remoto, o WebSocket permite ler e enviar mensagens nos dois formatos especificados no RFC6455, UTF8 texto e binário. O WebSocket executa a validação UTF8 em todas as mensagens de texto de saída para garantir que elas atendam às especificações. As mensagens binárias não possuem nenhum processamento adicional e sua interpretação é inteiramente deixada para o usuário da biblioteca. Para determinar o tipo de uma mensagem recebida, use websocketpp :: messagebuffer :: message :: getopcode. Os valores de retorno relevantes são websocketpp :: frame :: opcode :: text e websocketpp :: frame :: opcode :: binário. Não há diferença na forma como as cargas úteis são recuperadas entre esses modos, apenas em como o WebSocket validou os conteúdos e como o usuário da biblioteca deve interpretar os dados. Para especificar o tipo de uma mensagem de saída, use os valores de opcode do quadro listados acima como o segundo parâmetro op para websocketpp :: connection :: send. Existem duas sobrecargas relevantes de envio. Um que leva um std :: string e padrões para optexto. O outro que leva um vazio const e um comprimento de sizet e padrão para opbinary. Nota: Você pode enviar mensagens binárias através da sobrecarga de string e mensagens de texto através da sobrecarga de vazio. No caso de você estar construindo manualmente um buffer de mensagens em vez de usar as funções de envio automático de membros, você pode passar o opcode como um parâmetro para o construtor ou usuário de buffer de mensagens, a função de membro websocketpp :: messagebuffer :: message :: setopcode para Configure ou volte a configurá-lo mais tarde. Gerenciamento de dependência O WebSocket pode ser usado sem Boost Sim. O WebSocket só usa os recursos do Boost como polyfills para recursos de linguagem C11 e bibliotecas. Se você tem um compilador C11 e uma biblioteca padrão, você pode usar o WebSocket sem o Boost. Na maioria dos casos, configurar seu ambiente de compilação para usar o dialogo de idioma C11 (ou posterior) é suficiente para habilitar este modo de uso. Com compiladores menos comuns (e às vezes compiladores de lançamento muito recentes) pode haver problemas específicos com certas bibliotecas que não são detectadas automaticamente pela biblioteca. Para essas situações, existem definições adicionais disponíveis para afinar as bibliotecas C11 e os recursos utilizados. TODO: mais detalhes sobre eles. Para o transporte iastreamraw, a biblioteca padrão C11 é suficiente. Para os transportes baseados em Asio, não existe uma biblioteca C11 que forneça os recursos de rede que a Asio faz. Como tal, mesmo com um sistema de compilação C11, você precisará de uma cópia autônoma do Asio para usar se Boost Asio não estiver disponível. O WebSocket pode ser usado com asio Sim. O processo é o mesmo usado no próprio Asio autônomo. Defina ASIOSTANDALONE antes de incluir cabeçalhos Asio ou WebSocket. Você precisará baixar uma cópia dos cabeçalhos Asio separadamente (think-async) e certificar-se de que eles estão em seus sistemas de compilação incluem o caminho. O WebSocket pode ser usado sem TLS ou OpenSSL Sim. Ao usar o transporte iostreamraw, não há recursos TLS e o OpenSSL não é necessário. Ao usar os recursos TLS do Transporte Asio são opcionais. Você só precisa do OpenSSL se desejar usar o TLS. Você só pode fazer ou receber conexões criptografadas (httpswss) se você tiver habilitado recursos TLS. Se um ponto final do Asio usa TLS ou não é determinado pelo seu parâmetro de modelo de configuração. O padrão configurado websocketpp :: config :: asio e websocketpp :: config :: as configurações asioclient não suportam TLS, o websocketpp :: config :: asiotls e websocketpp :: config :: asiotlsclient do. Os cabeçalhos ltwebsocketppconfigasio. hpp gt e ltwebsocketppconfigasioclient. hpp gt incluirão os varizes TLS e não TLS de suas respectivas configurações e exigem a presença do OpenSSL. Os cabeçalhos ltwebsocketppconfigasionotls. hpp gt e ltwebsocketppconfigasionotlsclient. hpp gt incluirão apenas as configurações não TLS e não exigem o OpenSSL. Crie problemas com o TLS em versões recentes do OS X O Mac OS X envia uma versão bastante desatualizada da biblioteca OpenSSL. Para usar de forma segura o TLS com o WebSocket no OS X, você precisará instalar uma versão moderna do OpenSSL via homebrew ou compilar a partir da fonte. Compressão Como uso permessage-deflate na versão 0.6.0-permessagedeflate e 0.7.0 Estas versões da biblioteca requerem uma configuração personalizada para usar a extensão permessage-deflate. Aqui está um exemplo mínimo de uma configuração personalizada. Você também pode integrar essas linhas em uma configuração personalizada existente. Observe que, nessas versões, não há controle fino sobre quais conexões são compactadas ou não. Os clientes solicitarão compressão com as configurações padrão e usá-las se o servidor suportar. Os servidores aceitarão os parâmetros que os clientes solicitam. As mensagens de saída, por padrão, serão compactadas se a compressão for negociada automaticamente durante o aperto de mão. Existe uma opção para forçar uma mensagem específica a ser enviada sem compressão, mesmo que a compactação tenha sido negociada. Isso pode ser útil para enviar dados que você já tenha sido compactado (imagens, arquivos zip, etc.). Struct deflateserverconfig. Public websocketpp :: config :: asio permessagecompress extensão estrutura permessagedeflateconfig typedef websocketpp :: serverltdeflateserverconfiggt serverendpointtype struct deflateclientconfig. Public websocketpp :: config :: asioclient permessagecompress extensão struct permessagedeflateconfig typedef websocketpp :: clientltdeflateclientconfiggt clientendpointtype É possível terminar uma conexão maliciosa rapidamente, sem amarrar recursos executando etapas limpas, Sim. A biblioteca irá detectar e encerrar automaticamente conexões que violam o protocolo WebSocket. Nos casos em que a biblioteca acredita que o ponto de extremidade remoto seja malicioso ou suficientemente quebrado seja improvável que compreenda ou processe o aperto de mão final, ele será omitido. Se o seu aplicativo detectar condições acima do nível de protocolo que você acredita ser malicioso, por exemplo, se você reconhecer um IP de um ataque conhecido de negação de serviço, você pode fechar a conexão com dois níveis diferentes de urgência. Use os métodos padrão de websocketpp :: endpoint :: close ou websocketpp :: connection :: close com um dos seguintes códigos especiais de fechamento: observe que o uso desses métodos de desconexão resulta em uma violação do protocolo WebSocket e pode ter reprovações negativas para O ponto de extremidade remoto em relação aos tempos limite da rede. Tenha cuidado ao usá-los. Problemas de compilação Obtendo erros de compilação relacionados ao std :: chrono. Boost :: chrono. Waitabletimer. Ou steadyclock Seu sistema de compilação pode estar confuso sobre se é suposto estar usando boost :: chrono ou std :: chrono. Boost detecta automaticamente esta configuração em alguns compiladores, mas não em outros. Definir BOOSTASIOHASSTDCHRONO pode ajudar. Veja boost. orgdoclibs1600dochtmlboostasiooverviewcpp2011chrono. html para mais detalhes. WebSocket WebSocket é uma licença de código aberto (licença BSD) única biblioteca C que implique RFC6455 O WebSocket Protocol. Permite integrar o cliente do WebSocket e a funcionalidade do servidor em programas C. Ele usa módulos de transporte de rede intercambiáveis, incluindo um baseado em C iostreams e um baseado em Boost Asio. Status de desenvolvimento A versão estável mais recente é 0.6.0. Usuários de versões anteriores são encorajados a atualizar. O desenvolvimento continua em documentação e exemplos, expandindo o suporte ao compilador, acompanhando o desenvolvimento da extensão WebSocket e o ajuste de desempenho avançado. 0.2.x, uma versão significativamente mais antiga que usa uma API diferente, não está mais em desenvolvimento ativo, mas é levemente suportada e correções de bugsecurity. Pode ser encontrado no ramo 0.2.x no Github. Apenas cabeçalho (0.3.x) Suporte total: RFC6455 Suporte parcial: Hixie draft 76, Hybi Drafts 7-17 Suporte total: FireFox 6, Chrome 14, IE 10, Safari amp Mobile Safari 6, suporte parcial: FireFox 4-5, Chrome 4-13, Safari 5.0.2, Mobile Safari 4.2, Opera 11.0 Geralmente portátil. Testado com Linux, OS X, Windows. GCC, LLVMClang, Visual Studio. Intel x64, i386, PowerPC, ARM
No comments:
Post a Comment