<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>C on KK的博客</title><link>https://spin6lock.github.io/tags/c/</link><description>Recent content in C on KK的博客</description><generator>Hugo</generator><language>zh-CN</language><lastBuildDate>Wed, 22 Jan 2020 00:00:00 +0800</lastBuildDate><atom:link href="https://spin6lock.github.io/tags/c/feed.xml" rel="self" type="application/rss+xml"/><item><title>skynet 中隐藏的单点服务 : Harbor</title><link>https://spin6lock.github.io/2020/01/22/skynet%E4%B8%AD%E9%9A%90%E8%97%8F%E7%9A%84%E5%8D%95%E7%82%B9%E6%9C%8D%E5%8A%A1.html</link><pubDate>Wed, 22 Jan 2020 00:00:00 +0800</pubDate><guid>https://spin6lock.github.io/2020/01/22/skynet%E4%B8%AD%E9%9A%90%E8%97%8F%E7%9A%84%E5%8D%95%E7%82%B9%E6%9C%8D%E5%8A%A1.html</guid><description>&lt;p&gt;昨晚和同事一起看 skynet 的代码，对于 skynet 实现的按名字发送消息比较好奇，走读了一下代码，特意写篇文章记录一下&lt;/p&gt;&#10;&lt;p&gt;Skynet 服务间通信，比较常用的是 &lt;code&gt;skynet.send&lt;/code&gt;，该接口在 &lt;code&gt;skynet/lualib/skynet.lua&lt;/code&gt; 中，实现则是 &lt;code&gt;skynet.core&lt;/code&gt; 模块的 send 方法。&lt;code&gt;skynet.core&lt;/code&gt; 是 skynet 提供给 lua 的一个 so，代码在 &lt;code&gt;skynet/lualib-src/lua-skynet.c&lt;/code&gt;，它用了一个巧妙的注册办法：&lt;code&gt;luaopen_skynet_core&lt;/code&gt;，将自己注册成 &lt;code&gt;skynet.core&lt;/code&gt; 了。它提供的 send 方法就是 C 代码里的 &lt;code&gt;lsend&lt;/code&gt;，也就是 &lt;code&gt;send_message&lt;/code&gt; 方法。对于目标服务地址是字符串的，就会用 &lt;code&gt;skynet_sendname&lt;/code&gt; 实现发送&lt;/p&gt;</description></item></channel></rss>