Pergunta

Eu estou escrevendo um servidor web em Java e eu quero isso para apoiar HTTP 1.1 conexões keep-alive. Mas como posso dizer quando o cliente é feito o envio de solicitações para uma determinada conexão? (Como uma linha de fim-de-dupla ou algo assim).

Vamos ver como alças stackoverflow esta pergunta muito obscuro - respostas para que, no Google, estão atolados em especificações técnicas e linguagem obscura. Quero uma resposta plain-Inglês para um programador não-C:)


Eu vejo. que confirma minha suspeita de ter que confiar na SocketTimeoutException. Mas eu não tinha certeza se havia algo que eu poderia contar com a partir do cliente que indica que ele é feito com a conexão - que me permita fechar as conexões mais cedo na maioria dos casos - em vez de esperar o tempo limite. Graças

Foi útil?

Solução

Se você está construindo o seu servidor para cumprir a norma, então você tem um monte de informações para orientá-lo aqui já.

Simples falado, deve ser baseado em um tempo desde que uma ligação foi usado, e não tanto ao nível dos dados de solicitação.

De uma forma mais fôlego, a seção

considerações práticas do HTTP documento / 1.1 tem alguma orientação para você:

"Servidores geralmente têm algum valor de tempo limite além do qual eles vão não manter uma inativa conexão. Os servidores proxy pode fazer este maior valor, pois é provável que o cliente estará fazendo mais conexões através do mesmo servidor. A utilização de ligações persistentes coloca nenhuma exigência sobre o comprimento (Ou existência) deste tempo limite para o cliente ou o servidor. "

ou

"Quando um cliente ou servidor deseja time-out ele deve emitir um gracioso fechar a conexão de transporte. Clientes e servidores devem tanto assistir constantemente para o outro lado o transporte perto, e responder a ela como apropriado. Se um cliente ou servidor não detecta perto do outro lado prontamente que poderia causar desnecessária dreno de recursos na rede ".

Outras dicas

Vamos ver alças como stackoverflow esta questão muito obscura -. Respostas para que, no Google, estão atolados em especificações técnicas e linguagem obscura

Acabei de colocar Quando devo fechar um HTTP 1.1 conexão? no Google, e a terceira batida foi HTTP Realmente Fácil. Na tabela de conteúdos, há um link para uma seção intitulada conexões persistentes eo " Connection: close" Header . Esta seção é de três parágrafos longos, usa uma linguagem muito simples, e lhe diz exatamente o que você quer saber.

Eu quero uma resposta plain-Inglês para um programador não-C:)

Com o devido respeito, a programação é um esforço técnico, onde os detalhes fazem uma grande diferença. Lendo documentação técnica é uma habilidade absolutamente essencial. Baseando-se em "plain English" interpretações de terceiros das especificações só irá resultar em que você está fazendo um mau trabalho.

Você fechá-lo sempre que você gostaria. O cabeçalho indica que o cliente preferir que você deixe a conexão aberta, mas que não requer o servidor para cumprir. A maioria dos servidores deixá-la aberta por cerca de 5-10 segundos, alguns não prestar atenção a ela em tudo.

Você deve ler os RFCs que lidam com o recurso keep-alive. Caso contrário, você pode acabar com um servidor que não funciona como esperado.

Como @ [Stephen] já referiu, o servidor está livre para fechar a qualquer momento conexão que deseja (ok, não no meio de um par de solicitação / resposta embora). O mesmo vale para o cliente. Qualquer outra solução seria permitir que o servidor ou o cliente para executar um DoS em outra parte.

EDIT: Ter um olhar para o cabeçalho Connection. O cliente (e servidor) pode solicitar um encerramento de conexão graciosa usando o cabeçalho. Por exemplo, Connection: close dentro do pedido é um pedido para o servidor para fechar a conexão depois que ele envia a resposta.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top