2
我是Ruby的新手。 我試圖做一個應用程序,從串行端口讀取並將值放入sqlite3數據庫。當客戶端通過TCP套接字連接時,他應該從db接收值。客戶端寫入的值應該通過串口發送。EventMachine服務器和使用SQL的串口
我有兩個關於我的應用程序的問題。
這將在主線程(?)上打開一個連接到數據庫,每個客戶端一個連接。 有沒有更好的方式來使用sqlite3? 我想我想通了。 SQLite3是不是線程安全的默認,所以這似乎是如何做到這一點..
我如何寫入recieve_data方法的serialport?是否可以將串行全局變量?
#!/usr/bin/env ruby
#
# server_1
require 'rubygems'
require 'eventmachine'
require 'sqlite3'
require 'em-serialport'
require 'json'
module SocketClient
def self.list
@list ||= []
end
def post_init
SocketClient.list << self
@db = SQLite3::Database.new("data.db")
values = []
@db.execute("SELECT * FROM values") do |row|
values << {row[0] => row[1]} #id => value
end
self.send_data "#{values.to_json}\n"
p "Client connected"
end
def unbind
SocketClient.list.delete self
@db.close
end
def receive_data data
p data
#How do i send via serialport from here??? serial.send_data data
end
end
db = SQLite3::Database.new("data.db")
EM.run{
EM.start_server '0.0.0.0', 8081, SocketClient
serial = EM.open_serial '/dev/tty.usbserial-xxxxxxxx', 9600, 8, 1, 0
serial.on_data do |data|
#Parse data into an array called values
db.execute("UPDATE values SET value = ? WHERE id = ?", values["value"], values["id"])
SocketClient.list.each{ |c| c.send_data "#{values.to_json}\n" }
end
}
db.close
你應該考慮的SerialPort有時會崩潰,所以使用某種展開救援結束碼的管理錯誤 – 2012-09-06 22:54:09