Skynet连接Mysql

还是熟悉的增删改查,来嘛

数据库环境不再多介绍了,随便拿一个数据库可视化软件,连接服务器数据库试一下,确保能用。(你用Navicat也好,SqlServer也罢,能连上就行),这里用的SqlServer,

新建表

创建一个名为message_board的库,

image-20211027142603537

再新建一个叫msgs的表

image-20211027155156678

其中一列为id,设置为int、主键、非空、自增,另一列为text设置为text类型即可

手动插入两条数据

image-20211027155910782

代码实现

然后我们用代码测试插入

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)

运行

运行一下试试

GIF 2021-10-27 16-07-36

没问题昂,可以加一个实际场景,把之前的监听窗口的内容接收到后存入数据库中

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模拟客户端操作

GIF 2021-10-27 16-32-16

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

上上签i

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值