用原生ruby写一个最简单的http服务端

用原生ruby写一个最简单的http服务端:

背景:为了要接botvs的能用协议,学习ruby 的socket,在程序与程序之间进行高效的交换数据 是成功的。但对接botvs总timeout。原因是botvs在与协议程序交互时,发起的请求是http请求。那我们为了要解开这个bug就要实现最简单的能处理http请求的ruby服务端为准。在浏览器直接打开能拿到返回的数据证明成功解决问题。PS:为什么不用rails来处理,对于简单的ruby原生代码一个脚本能解决的事,没有必要用肥大的rails来处理,而且装rails程序需要手工来生成,而原生的ruby脚本可以直接自动化部署,这样日后在需要多台服务器托管时,很方便!

在网上折腾了很久,终于找到一篇能实现的: 尝试解析HTTP请求时,Ruby Web服务器挂起ruby ,把里面的代码去掉while就可以跑越来了…,处理过的代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
require 'socket'
server = TCPServer.new('localhost', 2345)
http_request = ""
loop do
socket = server.accept
request = socket.gets
line = socket.gets
puts line
http_request << line
response = "Hello World!\n"
socket.print "HTTP/1.1 200 OK\r\n" +
"Content-Type: text/plain\r\n" +
"Content-Length: #{response.bytesize}\r\n" +
"Connection: close\r\n"
socket.print "\r\n"
socket.print response
puts "DONE with while loop!"
socket.close
end

好了,运行越来,然后在浏览器里打开http://localhost:2345/test 试试看吧~