还是熟悉的增删改查,来嘛
数据库环境不再多介绍了,随便拿一个数据库可视化软件,连接服务器数据库试一下,确保能用。(你用Navicat也好,SqlServer也罢,能连上就行),这里用的SqlServer,
新建表
创建一个名为message_board的库,
再新建一个叫msgs的表
其中一列为id,设置为int、主键、非空、自增,另一列为text设置为text类型即可
手动插入两条数据
代码实现
然后我们用代码测试插入
Pmain.lua
local skynet = require "skynet"
local mysql = require "skynet.db.mysql"
skynet.start(function()
--连接
local db=mysql.connect({
host="127.0.0.1",--数据库的IP
port=3306,--数据库的端口
database="message_board",--数据库的库名
user="root",
password="root",
max_packet_size = 1024 * 1024,
on_connect = nil
})
--插入
local res = db:query("insert into msgs (text) values (\'hehe\')")
--查询
res = db:query("select * from msgs")
--打印
for i,v in pairs(res) do
print ( i," ",v.id, " ",v.text)
end
end)
运行
运行一下试试
没问题昂,可以加一个实际场景,把之前的监听窗口的内容接收到后存入数据库中
Message.lua
local skynet = require "skynet"
local socket = require "skynet.socket"
local mysql = require "skynet.db.mysql"
local db= nil
function connect(fd, addr)
--启用连接
print(fd.." connected addr:"..addr)
socket.start(fd)
--消息处理
while true do
local readdata = socket.read(fd)
--正常接收
if readdata ~= nil then
--返回留言板内容
if readdata == "get\r\n" then
local res = db:query("select * from msgs")
for i,v in pairs(res) do
socket.write (fd, v.id.." "..v.text.."\r\n")
end
--留言
else
local data = string.match( readdata, "set (.-)\r\n")
db:query("insert into msgs (text) values (\'"..data.."\')")
end
--断开连接
else
print(fd.." close ")
socket.close(fd)
end
end
end
skynet.start(function()
--网络监听
local listenfd = socket.listen("0.0.0.0", 9999)
socket.start(listenfd ,connect)
--连接数据库
db=mysql.connect({
host="127.0.0.1",
port=3306,
database="message_board",
user="root",
password="root",
max_packet_size = 1024 * 1024,
on_connect = nil
})
end)
重写的connect方法中,如果客户端发送get\r\n,则查询数据库,然后一条条返回,如果客户端发送set xxx则表示写入数据库
\r\n表示换行符,在telnet中输入任意字符串都会被传到服务端
运行
记得先启动主服务,再开telnet模拟客户端操作