skynet源码分析(6)--消息机制之消息分发

本文作者探讨了Skynet框架中消息的分发过程,从lua层的skynet.send和skynet.call两个API入手,逐步剖析消息如何进入工作队列。通过源码分析,揭示了消息从lua层到C层的传递路径,包括lsend、send_message等多个函数调用,最终将消息添加到目标服务的消息队列。尽管文章未详细展开lua c api的讨论,但指出了消息处理的复杂性和后续将讲述的消息回调注册。
摘要由CSDN通过智能技术生成

作者:shihuaping0918@163.com,转载请注明作者

第5篇讲到了消息的处理,消息的处理实际上就是对工作队列里的消息不停地调回调函数。那么消息是怎么放进消息队列的呢。带着这个疑问,让我们从lua层开始追根溯源。

在lua层有两个api,一个是skynet.send,这个是非阻塞发消息。另一个是skynet.call,这个是阻塞式发完消息等回应。skynet.call使用一个session来实现等待,这个session实际就是一个自增的数字,溢出了以后又从1开始。

以skynet.send为例进行分析。skynet.send位于skynet/lualib/skynet.lua文件中。

function skynet.send(addr, typename, ...)
    local p = proto[typename]
    return c.send(addr, p.id, 0 , p.pack(...))  -- c就是skynet.core
end

可以看出skynet.send实际上是调了skynet.core里的send函数。而skynet.core的定义在skynet/lualib-src/lua-skynet.c这个文件中。因为下面有一部分代码涉及到lua c api,这部分我不打算说明了。

LUAMOD_API int
luaopen_skynet_core(lua_State *L) { //这个就是skynet.core
    luaL_checkversion(L);

    luaL_Reg l[] 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值