DAY06

今天从头到尾看了skynet框架,发现epoll监听到就绪事件会将其分成下面的事件类型去逐一处理

具体的逻辑是在forward_messege中执行的,大致的意思是将该连接和actor绑定到一起,初始化三种结构体的成员,skynet_socket_message,socket_message,skynet_message

其实即便知道了源码,也只是验证了自己的猜想。之前的框架自己已经清楚了,但是最重要的还是要使用这个框架来写代码。如何使用这个框架暴漏在外面的接口。

重点来了,业务逻辑使用lua写的,但是底层的socket的listen,connect以及绑定都是用c写的,该怎么用lua来调用呢?

此时就涉及到了一个知识点,虚拟栈,c和lua共享一个虚拟栈

例如,在c的代码中用一个lstart封装一下调用虚拟栈的skynet_socket_start函数,怎么传参又成了一个问题。大致的思想就是在.lua文件中调用socket.start传递的两个函数参数,都会加入到虚拟栈中,由于c和lua共用虚拟栈,所以c的代码中就需要从这个虚拟栈中获取两个元素,就是616和617的函数,这个L就是虚拟栈(暂时可以这么理解)。但是还没有说关键的socket.start是怎么调用c的lstart方法。

这涉及到一个注册问题

这个库要看你的函数名,一般以luaopen_开头,显然这是注册到skynet库下的子模块socketdriver中

然后通过引用这些库就能在lua中调用c的方法了

这就是在lua中调用c的大致逻辑。这一点搞明白了,难的来了,看不懂lua代码

像local red = function() 等等,一开始都看不太懂,还有一些lua的语法,设置元表之类的。暂时没有什么好的学习方法,只有死磕,将一小段代码拿出来,写个test.lua文件测试一下,看看效果,再根据效果去推理每个代码的意思,再让gpt生成一下注释,就大致明白了。

因为不能站在框架的角度去看问题,所以有的时候就搞不清楚里面的参数,慢慢来就是最快的方法,估计后天的样子就能搞完了。加油

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值