2016-05-30 2 views
0

Ich versuche einen HTTP-Client zu erstellen, der persistente Verbindungen verwendet. Mein Code funktioniert, wenn ich meine erste Anfrage sende und meine erste Antwort erhalte. Wenn ich jedoch eine zweite Anfrage sende, kann ich keine zweite Antwort erhalten. Ich bin mir nicht sicher warum? Ich habe den gleichen Fehler, wenn ich in C. CodierungRuby: Beständiger HTTP-Client, der keine Antwort auf eine zweite Anfrage erhält

Hier ist der Code

require 'socket' 
include Socket::Constants 
socket = Socket.new(AF_INET, SOCK_STREAM, 0) 
sockaddr = Socket.pack_sockaddr_in(80, 'www.google.com') 
socket.connect(sockaddr) 

# This Works 
socket.write("GET/HTTP/1.0\r\n\r\n") 
results = socket.read 

# This Works 
socket.write("GET/HTTP/1.0\r\n\r\n") 
# THIS DOESN'T WORK 
results = socket.read 

Ich will nicht gebaut Bibliotheken wie Net verwenden :: HTTP. Was muss ich tun, damit dies funktioniert?

+0

Stackoverflow ist nicht dazu gedacht, Ihre Aufgabe für Sie zu erledigen. Bitte lesen Sie http://stackoverflow.com/help/how-to-ask –

Antwort

0

Sie können nicht zwei HTTP-Anforderungen für dieselbe Verbindung erstellen, es sei denn, Sie haben dem Server mitgeteilt, dass Sie dies erwarten. So funktioniert HTTP persistent connection funktioniert. Zumindest müssen Sie sicherstellen, dass dieser Header auf Ihre Anfrage hinzuzufügen:

Connection: keep-alive 

Server haben unterschiedliche Unterstützung für persistente Verbindungen, obwohl es üblich geworden ist für Server Grund persistente Verbindungen zu unterstützen. Hier ist eine SO Frage, die What exactly does a “persistent connection” mean?

Starten Sie dort, und Sie werden finden, was Sie wissen müssen, damit dauerhafte Verbindungen ordnungsgemäß funktionieren. Möglicherweise müssen Sie die HTTP-Antwortheader überprüfen, um anzuzeigen, dass der Server Ihre Anforderung erfüllt, oder Sie müssen möglicherweise überprüfen, dass der Server die Verbindung nicht einfach geschlossen hat, als die erste Antwort geschrieben wurde. Auf Ihrer letzten Anforderung durch eine dauerhafte Verbindung, sollten Sie auch den Header angeben:

Connection: close 

Auch diese Ressourcen:

+0

Danke für Ihre Hilfe! Sortiert! –

+0

@OmarHijazi Ich bin froh, das zu hören. Viel Glück mit Ihrem Projekt! –

Verwandte Themen