Este capítulo é a primeira parte do envio de mensagens de texto. Vamos falar sobre o código para enviar mensagens de texto de forma síncrona/assíncrona. Nos próximos artigos, melhoraremos ligeiramente as funções e adicionaremos o limite da frequência de envio e dos tempos de envio diário.
Pode haver muitas maneiras de enviar mensagens de texto. Nosso método é usar os serviços fornecidos pelo provedor de serviços. De um modo geral, esses serviços são livres de idiomas. Aqui usamos o Java para escrever programas de amostra.
1. Interface para enviar mensagens de texto <r /> Selecione um provedor de serviços de acordo com sua própria situação.
2. Documento de desenvolvimento <Br /> Podemos ver no documento de desenvolvimento. Você pode usar solicitações HTTP diretamente ou solicitações de serviço da web para enviar mensagens de texto. Desde o código nas pastas Java e JSP na pasta Demo, use solicitações HTTP para enviar mensagens de texto. Então não vou entrar em detalhes aqui. Usamos o WebService para demonstrar o envio de mensagens de texto.
3. Gere o código do cliente
No documento da interface, sabemos que o URL de seu WebService WSDL é: http://106.ihuyi.cn/webservice/sms.php?wsdl, podemos executar o seguinte comando para gerar código do cliente:
wsimport -keep http://106.ihuyi.cn/webservice/sms.php?wsdl
Entre eles, o WSIMPORT é uma ferramenta que vem com o JDK, e a opção -keep URL é "manter os arquivos gerados". Este comando gerará pacotes sms.cn.ihuyi._106 no diretório atual, além de muitas classes. Em seguida, comece a escrever nosso próprio código.
4. Defina a interface
Por conveniência, aqui primeiro definimos uma interface:
Sms.java
interface pública SMS { / ** * Envie um SMS para celular, o conteúdo é mensagem * * @param número de telefone celular * @param mensagem sms content * @return retorna com sucesso -1, caso contrário, retorne outro valor * / int sendMessage (string móvel, mensagem de string);}Essa interface é muito simples, existe apenas um método. Este método é usado para enviar mensagens de texto.
5. Envie mensagens de texto simultaneamente
Em seguida, implementamos primeiro uma classe que envia SMS de maneira síncrona:
Ihuyismsimpl.java
public class ihuyismSimpl implementa SMS {String private String; senha de sequência privada; public void setAccount (String Conta) {this.account = conta; } public void setPassword (string senha) {this.password = senha; } @Override public int sendMessage (String Mobile, string message) {cn.ihuyi._106.sms factory = new cn.ihuyi._106.sms (); SMSSOAP SMSSOAP = FACTORY.GETSMSSOAP (); Submitresult submit = smssoap.submit (conta, senha, celular, mensagem); int code = submit.getCode (); if (code == 2) {return -1; } System.out.println ("Send SMS falhou, código:" + código); Código de retorno; }}Na linha 17, obtemos um objeto proxy do objeto remoto. Em seguida, podemos enviar SMS, consultar o saldo da conta e outras operações através deste objeto proxy.
Na linha 18, o conteúdo do SMS é enviado usando o método de envio do objeto proxy. A informação do parâmetro e o significado do valor de retorno do método são explicados em detalhes no documento da interface.
Na linha 19, obtemos o código de status do resultado. De acordo com as instruções sobre o documento, o código de status é 2, indicando que o envio é bem -sucedido. Por simplicidade, nos concentramos apenas na situação em que a submissão é bem -sucedida. Deve -se notar que o código de status é 2, indicando apenas que o envio é bem -sucedido. De acordo com o site oficial "Resposta em 3-5 segundos, 100% de chegada" no site oficial, podemos inferir. Se o envio for bem-sucedido, basicamente o SMS será enviado com sucesso dentro de 3-5 segundos. De acordo com a situação da rede do usuário, o usuário pode receber o SMS com um pequeno atraso.
Também é muito simples usar este código para enviar mensagens de texto. Você pode diretamente novo um objeto, definir sua conta e senha e enviar mensagens de texto.
6. Envie mensagens de texto de forma assíncrona
Como o envio do SMS envolve a comunicação de rede, o método SendMessage pode ter algum atraso. Para melhorar a experiência do usuário, podemos usar o método de enviar SMS de forma assíncrona. O princípio é muito simples: se o usuário solicitar o envio de SMS, em vez de chamar diretamente o método SendMessage do ihuyismSimpl, salvaremos a solicitação (produtor) e, em seguida, dizemos ao usuário: o SMS é enviado com sucesso. Depois disso, vários consumidores retiram a tarefa e chamam o método SendMessage para enviar SMS.
Aqui, eu uso o pool de threads para concluir a tarefa acima:
Asyncsmsimpl.java
classe pública asyncsmsiMpl implementa SMS {public SMS Sendsms; ExecutorService ExecutService = Executores.NewfixedThreadpool (3); public void se setSendsms (sms sendsms) {this.sendsms = sendsms; } @Override public int sendMessage (String móvel, string message) {try {ExecutorService.subMit (() -> sendsms.sendMessage (celular, mensagem)); } catch (Exceção e) {sysemt.out.println ("Ocorreu o erro ao enviar a tarefa" + e); retornar 0; } retornar -1; } public void Destroy () {try {ExecutorService.shutdown (); } catch (Exceção e) {}}}O código é muito simples. Você pode adicionar diretamente o método SendMessage (celular, mensagem) da interface SMS à fila de tarefas do pool de threads como uma tarefa. Dessa forma, quando houver threads gratuitos, o sendsms.sendMessage (celular, mensagem) será executado para enviar SMS. Aqui, assumimos que, desde que seja salvo no pool de threads, você pode enviar com sucesso SMS. Porque enviar o fracasso é realmente raro.
Enviar mensagens de texto de forma síncrona/assíncrona é concluída. Nos próximos artigos, examinaremos algumas restrições comuns, como: você pode enviar apenas uma vez por minuto, só pode enviar 5 vezes por dia, etc.
Espero que todos gostem deste artigo.