मैं सॉकेट से पढ़ने पर एक 2 भाग सवाल है और कैसेकैसे उपयोग कर, पढ़ readpartial रूबी में एक TCPServer सॉकेट से पढ़ सकते हैं और read_nonblock
- मैंने सीखा है यह यूनिकॉर्न या संकर जाति की तरह रूबी सर्वर पर प्रबंधित करने के लिए कि सॉकेट से पढ़ने के लिए एक फ़ाइल पढ़ने से अलग है और कोई विशिष्ट ईओएफ संदेश नहीं भेजा गया है और डेटा एक अंतहीन धारा है। तो आप कैसे पढ़ना बंद करना जानते हैं? इस मामले में जब मैं किसी ब्राउज़र से
http://localhost:9799
तक पहुंच कर अपने सर्वर हिट में उदाहरण के लिए मेरे TCPServer, यह लटका हुआ है के बाद वहाँ पढ़ने के लिए कोई और अधिक डेटा और यह या तो EOFError फेंक नहीं होंगे।
require 'socket'
READ_CHUNK = 1024
socket = Socket.new(Socket::AF_INET, Socket::SOCK_STREAM)
addr = Socket.pack_sockaddr_in(9799, '127.0.0.1')
socket.bind(addr)
socket.listen(Socket::SOMAXCONN)
socket.setsockopt(:SOCKET, :REUSEADDR, true)
puts "Server is listening on port = 9799"
loop do
connection, addr_info = socket.accept
data_buffer = ""
loop do
begin
connection.read_nonblock(READ_CHUNK, data_buffer)
puts "Buffer = #{data_buffer}"
rescue Errno::EAGAIN => e
IO.select([connection])
retry
rescue EOFError
break
end
end
connection.write("HTTP/1.1 200 \r\n")
connection.write("Content-Type: text/html\r\n")
connection.write("Status 200 \r\n")
connection.write("Connection: close \r\n")
connection.write("Hello World \r\n")
connection.close
end
मैं जानना चाहते हैं क्या सबसे अच्छा अभ्यास/मानक रूबी सर्वर द्वारा इस्तेमाल किया दृष्टिकोण। मुझे लगता है कि यूनिकॉर्न kgio लाइब्रेरी से read_nonblock का उपयोग करता है और मैंग्रेल रीडपार्टियल का उपयोग करता है (मुझे इनके बारे में निश्चित नहीं है लेकिन कोड के माध्यम से जा रहा है यह मुझे लगता है कि दृष्टिकोण अपनाया गया है।) \ R \ n के लिए चेक के साथ भी सर्वर कैसे जानता है इनपुट पूरा हो गया है। समझा सकते हैं कि यह कैसे किया जाना चाहिए (और मुझे लगता है कि gets
दृष्टिकोण नहीं है - अपने read
, readpartial
, read_nonblock
के साथ)।
2)। मैं वास्तव में यह कैसे गेंडा या यात्री
धन्यवाद की तरह सर्वर में हासिल की है पर कुछ लाइनें की सराहना करेंगे।
प्रतिक्रिया के लिए धन्यवाद और मुझे http_parser.rb पर परिचय देना। किसी भी सर्वर के बारे में जानें जो पार्सर लाइब्रेरी का उपयोग नहीं करता है और किसी अन्य दृष्टिकोण का चयन करता है? – Sid
मैं सर्वर पारसर्स का उपयोग नहीं करते पता नहीं है, एक और दृष्टिकोण की किस तरह? – Shtirlic
इम खेद है कि मैं क्या मतलब सर्वर http_parser.rb पुस्तकालय का उपयोग नहीं करते थे। – Sid