我无法将大数据发送到我收听的套接字。
这是server.rb:
#!/usr/bin/env ruby
require 'socket'
server = TCPServer::new 3000
loop do
client = server.accept
client.puts 'Running...'
raw_data = client.gets.chomp
client.puts "Got #{raw_data}"
client.puts 'done.'
client.close
end
使用$ ruby server.rb
运行服务器后,我可以
$ echo "test" | curl telnet://127.0.0.1:3000
Running...
Got test
done.
$ echo "something else" | curl telnet://127.0.0.1:3000
Running...
Got something else
done.
但是我在运行时遇到错误:
$ cat /a/sizable/xml/file.xml | curl telnet://127.0.0.1:3000
curl: (55) Send failure: Broken pipe
Running...%
似乎我可以使用43b文件运行良好,但是当我使用5.3k XML文件运行它时会失败。
我也试过了:
$ curl -T "/a/sizable/xml/file.xml" telnet://localhost:3000
产生相同的结果。
如何将此原始XML数据发送到我的服务器?
答案 0 :(得分:1)
在服务器上,您只是阅读客户端发送的第一行数据
raw_data = client.gets.chomp
您的XML文件可能包含多行。但是,在服务器读取第一行之后,它会将其打印回来并简单地关闭连接。这会导致“断管”错误,因为curl在关闭连接时终止。
为了阅读整个输入,您可以改为使用它:
while raw_line = client.gets.chomp # Read lines from socket
client.puts "Got #{raw_line}" # and print them
end
client.puts "done."