HTTP-сервер
Вот пример немного поинтереснее — HTTP-сервер:
require "http/server"
server = HTTP::Server.new do |context|
context.response.content_type = "text/plain"
context.response.print "Hello world! The time is #{Time.local}"
end
address = server.bind_tcp 8080
puts "Listening on http://#{address}"
server.listen
Приведённый выше код станет понятен, когда вы прочитаете всю справочную документацию по языку, но уже сейчас мы можем узнать кое-что.
-
Вы можете подключать код, определённый в других файлах:
require "http/server"
-
Вы можете объявлять локальные переменные, не указывая их тип:
server = HTTP::Server.new(...)
-
Порт HTTP-сервера задаётся с помощью метода bind_tcp объекта HTTP::Server (в данном случае порт установлен в значение 8080).
address = server.bind_tcp 8080
-
Программы создаются путём вызова методов (или отправки сообщений) объектам.
HTTP::Server.new(...) # ... Time.local # ... address = server.bind_tcp 8080 # ... puts "Listening on http://#{address}" # ... server.listen -
Вы можете использовать блоки кода, или просто блоки, — это очень удобный способ повторно использовать код и применять некоторые возможности функционального программирования:
HTTP::Server.new do |context| # ... end
-
Вы можете легко создавать строки со встроенным содержимым — это называется интерполяцией строк. В языке также предусмотрен другой синтаксис для создания массивов, хешей, диапазонов, кортежей и других структур:
"Hello world! The time is #{Time.local}"
To the extent possible under law, the persons who contributed to this workhave waived
all copyright and related or neighboring rights to this workby associating CC0 with it.
https://crystal-lang.org/reference/1.2/getting_started/http_server.html