面试题答案
一键面试选择MQTT协议
MQTT是一个基于客户端-服务器的消息发布/订阅传输协议,具有轻量级、低带宽、低功耗等特点,非常适合物联网场景。
Ruby代码搭建基本通信框架
- 安装MQTT库:在Ruby项目中,我们可以使用
mqtt
gem库。通过在项目目录下运行gem install mqtt
来安装。 - 连接建立:
require 'mqtt'
client = MQTT::Client.connect(
host: 'broker.example.com',
port: 1883,
username: 'your_username',
password: 'your_password'
)
- 消息发送:
topic = 'iot/data'
message = 'Hello from IoT device'
client.publish(topic, message)
- 消息接收:
client.subscribe('iot/data') do |topic, msg|
puts "Received message on topic '#{topic}': #{msg}"
end
client.loop
- 关闭连接:
client.disconnect
说明
- 连接建立:
MQTT::Client.connect
方法用于与MQTT服务器建立连接,需指定服务器地址、端口、用户名和密码等参数。 - 消息发送:
client.publish
方法用于向指定主题发布消息。 - 消息接收:
client.subscribe
方法用于订阅主题,并通过块处理接收到的消息。client.loop
方法用于启动客户端循环,以便持续接收消息。 - 关闭连接:
client.disconnect
方法用于断开与服务器的连接。
如果选择HTTP协议:
- 安装HTTP库:可以使用
net/http
库,这是Ruby标准库的一部分,无需额外安装。 - 发送数据(POST请求示例):
require 'net/http'
require 'uri'
uri = URI('http://iot-server.example.com/api/data')
http = Net::HTTP.new(uri.host, uri.port)
request = Net::HTTP::Post.new(uri)
request.body = 'data=Hello from IoT device'
response = http.request(request)
puts response.body
- 接收数据(服务器端示例,简单模拟):
require 'webrick'
server = WEBrick::HTTPServer.new(
Port: 8080,
DocumentRoot: '.'
)
server.mount_proc('/api/data') do |req, res|
res.status = 200
res.body = "Received data: #{req.body}"
end
trap('INT') { server.shutdown }
server.start
说明
- HTTP发送数据:通过
Net::HTTP
库构建POST请求向服务器发送数据。 - HTTP接收数据:使用
WEBrick
搭建一个简单的HTTP服务器来接收数据。不过实际应用中可能需要更复杂的服务器框架如Rails等。相比MQTT,HTTP在物联网场景下可能消耗更多资源,但简单直接,适合一些对实时性要求不高且设备资源相对充足的场景。