<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>sqsy (kevinhua)</title>
    <link>https://ruby-china.org/sqsy</link>
    <description>业精于勤而荒于嬉</description>
    <language>en-us</language>
    <item>
      <title>开发环境 (Ubuntu Kylin 16.04 LTS) redcarpet 安装失败</title>
      <description>&lt;p&gt;开发环境 (Ubuntu Kylin 16.04 LTS) redcarpet 安装失败，找遍 stackoverflow 和 redcarpet git repository issues，尝试了诸多方法后 (不同的 ruby 版本，2.4.0, 2.4.3, 2.5.0 都试了一遍，不同的 redcarpet 版本从 2.2 到 3.4，libgmp-dev, libgmp3-dev, GMP 也都安装了一遍)，都无法解决。&lt;/p&gt;

&lt;p&gt;(生产环境 Ubuntu Server 14.04 安装顺利，且两年前，Ubuntu Kylin 开发环境安装 redcarpet 3.3.4 也没有任何问题)&lt;/p&gt;

&lt;p&gt;根据 repository issues，应该是常见问题，不知道有没有遇到相同问题。&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;Building native extensions. This could take a &lt;span class="k"&gt;while&lt;/span&gt;...
ERROR:  Error installing redcarpet:
    ERROR: Failed to build gem native extension.

    current directory: /home/kevin/.rbenv/versions/2.4.3/lib/ruby/gems/2.4.0/gems/redcarpet-3.4.0/ext/redcarpet
/home/kevin/.rbenv/versions/2.4.3/bin/ruby &lt;span class="nt"&gt;-r&lt;/span&gt; ./siteconf20180111-24116-8kyrcv.rb extconf.rb
creating Makefile

current directory: /home/kevin/.rbenv/versions/2.4.3/lib/ruby/gems/2.4.0/gems/redcarpet-3.4.0/ext/redcarpet
make &lt;span class="s2"&gt;"DESTDIR="&lt;/span&gt; clean

current directory: /home/kevin/.rbenv/versions/2.4.3/lib/ruby/gems/2.4.0/gems/redcarpet-3.4.0/ext/redcarpet
make &lt;span class="s2"&gt;"DESTDIR="&lt;/span&gt;
compiling autolink.c
compiling buffer.c
buffer.c: In &lt;span class="k"&gt;function&lt;/span&gt; ‘bufcstr’:
buffer.c:111:45: warning: passing argument 1 of ‘bufgrow’ discards ‘const’ qualifier from pointer target &lt;span class="nb"&gt;type&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;-Wdiscarded-qualifiers&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
  &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;buf-&amp;gt;size + 1 &amp;lt;&lt;span class="o"&gt;=&lt;/span&gt; buf-&amp;gt;asize &lt;span class="o"&gt;||&lt;/span&gt; bufgrow&lt;span class="o"&gt;(&lt;/span&gt;buf, buf-&amp;gt;size + 1&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; BUF_OK&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
                                             ^
buffer.c:60:1: note: expected ‘struct buf &lt;span class="k"&gt;*&lt;/span&gt;’ but argument is of &lt;span class="nb"&gt;type&lt;/span&gt; ‘const struct buf &lt;span class="k"&gt;*&lt;/span&gt;’
 bufgrow&lt;span class="o"&gt;(&lt;/span&gt;struct buf &lt;span class="k"&gt;*&lt;/span&gt;buf, size_t neosz&lt;span class="o"&gt;)&lt;/span&gt;
 ^
buffer.c: At top level:
cc1: warning: unrecognized &lt;span class="nb"&gt;command &lt;/span&gt;line option ‘-Wno-self-assign’
cc1: warning: unrecognized &lt;span class="nb"&gt;command &lt;/span&gt;line option ‘-Wno-constant-logical-operand’
cc1: warning: unrecognized &lt;span class="nb"&gt;command &lt;/span&gt;line option ‘-Wno-parentheses-equality’
cc1: warning: unrecognized &lt;span class="nb"&gt;command &lt;/span&gt;line option ‘-Wno-tautological-compare’
compiling houdini_href_e.c
compiling houdini_html_e.c
compiling html.c
compiling html_smartypants.c
html_smartypants.c: In &lt;span class="k"&gt;function&lt;/span&gt; ‘squote_len’:
html_smartypants.c:104:39: warning: initialization discards ‘const’ qualifier from pointer target &lt;span class="nb"&gt;type&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;-Wdiscarded-qualifiers&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
  static char&lt;span class="k"&gt;*&lt;/span&gt; single_quote_list[] &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt; &lt;span class="s2"&gt;"'"&lt;/span&gt;, &lt;span class="s2"&gt;"&amp;amp;#39;"&lt;/span&gt;, &lt;span class="s2"&gt;"&amp;amp;#x27;"&lt;/span&gt;, &lt;span class="s2"&gt;"&amp;amp;apos;"&lt;/span&gt;, NULL &lt;span class="o"&gt;}&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
                                       ^
html_smartypants.c:104:44: warning: initialization discards ‘const’ qualifier from pointer target &lt;span class="nb"&gt;type&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;-Wdiscarded-qualifiers&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
  static char&lt;span class="k"&gt;*&lt;/span&gt; single_quote_list[] &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt; &lt;span class="s2"&gt;"'"&lt;/span&gt;, &lt;span class="s2"&gt;"&amp;amp;#39;"&lt;/span&gt;, &lt;span class="s2"&gt;"&amp;amp;#x27;"&lt;/span&gt;, &lt;span class="s2"&gt;"&amp;amp;apos;"&lt;/span&gt;, NULL &lt;span class="o"&gt;}&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
                                            ^
html_smartypants.c:104:53: warning: initialization discards ‘const’ qualifier from pointer target &lt;span class="nb"&gt;type&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;-Wdiscarded-qualifiers&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
  static char&lt;span class="k"&gt;*&lt;/span&gt; single_quote_list[] &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt; &lt;span class="s2"&gt;"'"&lt;/span&gt;, &lt;span class="s2"&gt;"&amp;amp;#39;"&lt;/span&gt;, &lt;span class="s2"&gt;"&amp;amp;#x27;"&lt;/span&gt;, &lt;span class="s2"&gt;"&amp;amp;apos;"&lt;/span&gt;, NULL &lt;span class="o"&gt;}&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
                                                     ^
html_smartypants.c:104:63: warning: initialization discards ‘const’ qualifier from pointer target &lt;span class="nb"&gt;type&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;-Wdiscarded-qualifiers&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
  static char&lt;span class="k"&gt;*&lt;/span&gt; single_quote_list[] &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt; &lt;span class="s2"&gt;"'"&lt;/span&gt;, &lt;span class="s2"&gt;"&amp;amp;#39;"&lt;/span&gt;, &lt;span class="s2"&gt;"&amp;amp;#x27;"&lt;/span&gt;, &lt;span class="s2"&gt;"&amp;amp;apos;"&lt;/span&gt;, NULL &lt;span class="o"&gt;}&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
                                                               ^
html_smartypants.c: In &lt;span class="k"&gt;function&lt;/span&gt; ‘smartypants_squote’:
html_smartypants.c:149:30: warning: comparison between signed and unsigned integer expressions &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;-Wsign-compare&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
    uint8_t next_char &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;size &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; 1+next_squote_len&lt;span class="o"&gt;)&lt;/span&gt; ? text[1+next_squote_len] : 0&lt;span class="p"&gt;;&lt;/span&gt;
                              ^
html_smartypants.c: In &lt;span class="k"&gt;function&lt;/span&gt; ‘smartypants_cb__amp’:
html_smartypants.c:250:2: warning: ISO C90 forbids mixed declarations and code &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;-Wdeclaration-after-statement&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
  int len &lt;span class="o"&gt;=&lt;/span&gt; squote_len&lt;span class="o"&gt;(&lt;/span&gt;text, size&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  ^
html_smartypants.c: At top level:
cc1: warning: unrecognized &lt;span class="nb"&gt;command &lt;/span&gt;line option ‘-Wno-self-assign’
cc1: warning: unrecognized &lt;span class="nb"&gt;command &lt;/span&gt;line option ‘-Wno-constant-logical-operand’
cc1: warning: unrecognized &lt;span class="nb"&gt;command &lt;/span&gt;line option ‘-Wno-parentheses-equality’
cc1: warning: unrecognized &lt;span class="nb"&gt;command &lt;/span&gt;line option ‘-Wno-tautological-compare’
compiling markdown.c
markdown.c: In &lt;span class="k"&gt;function&lt;/span&gt; ‘char_link’:
markdown.c:1045:3: warning: ISO C90 forbids mixed declarations and code &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;-Wdeclaration-after-statement&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
   struct buf &lt;span class="nb"&gt;id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt; 0, 0, 0, 0 &lt;span class="o"&gt;}&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
   ^
markdown.c:1085:3: warning: ISO C90 forbids mixed declarations and code &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;-Wdeclaration-after-statement&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
   size_t nb_p &lt;span class="o"&gt;=&lt;/span&gt; 0&lt;span class="p"&gt;;&lt;/span&gt;
   ^
markdown.c: In &lt;span class="k"&gt;function&lt;/span&gt; ‘sd_markdown_render’:
markdown.c:2818:2: warning: ISO C90 forbids mixed declarations and code &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;-Wdeclaration-after-statement&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
  int footnotes_enabled  &lt;span class="o"&gt;=&lt;/span&gt; md-&amp;gt;ext_flags &amp;amp; MKDEXT_FOOTNOTES&lt;span class="p"&gt;;&lt;/span&gt;
  ^
markdown.c:2836:43: warning: passing argument 1 of ‘is_codefence’ discards ‘const’ qualifier from pointer target &lt;span class="nb"&gt;type&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;-Wdiscarded-qualifiers&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
   &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;codefences_enabled &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;is_codefence&lt;span class="o"&gt;(&lt;/span&gt;document + beg, doc_size - beg, NULL&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; 0&lt;span class="o"&gt;))&lt;/span&gt;
                                           ^
markdown.c:1389:1: note: expected ‘uint8_t &lt;span class="k"&gt;*&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;aka unsigned char &lt;span class="k"&gt;*&lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;’ but argument is of &lt;span class="nb"&gt;type&lt;/span&gt; ‘const uint8_t &lt;span class="k"&gt;*&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;aka const unsigned char &lt;span class="k"&gt;*&lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;’
 is_codefence&lt;span class="o"&gt;(&lt;/span&gt;uint8_t &lt;span class="k"&gt;*&lt;/span&gt;data, size_t size, struct buf &lt;span class="k"&gt;*&lt;/span&gt;syntax&lt;span class="o"&gt;)&lt;/span&gt;
 ^
markdown.c: At top level:
markdown.c:94:15: warning: ‘char_underline’ declared ‘static’ but never defined &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;-Wunused-function&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
 static size_t char_underline&lt;span class="o"&gt;(&lt;/span&gt;struct buf &lt;span class="k"&gt;*&lt;/span&gt;ob, struct sd_markdown &lt;span class="k"&gt;*&lt;/span&gt;rndr, uint8_t &lt;span class="k"&gt;*&lt;/span&gt;data, size_t offset, size_t size&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
               ^
cc1: warning: unrecognized &lt;span class="nb"&gt;command &lt;/span&gt;line option ‘-Wno-self-assign’
cc1: warning: unrecognized &lt;span class="nb"&gt;command &lt;/span&gt;line option ‘-Wno-constant-logical-operand’
cc1: warning: unrecognized &lt;span class="nb"&gt;command &lt;/span&gt;line option ‘-Wno-parentheses-equality’
cc1: warning: unrecognized &lt;span class="nb"&gt;command &lt;/span&gt;line option ‘-Wno-tautological-compare’
compiling rc_markdown.c
rc_markdown.c: In &lt;span class="k"&gt;function&lt;/span&gt; ‘rb_redcarpet_md_render’:
rc_markdown.c:138:2: warning: ISO C90 forbids mixed declarations and code &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;-Wdeclaration-after-statement&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
  struct rb_redcarpet_rndr &lt;span class="k"&gt;*&lt;/span&gt;renderer&lt;span class="p"&gt;;&lt;/span&gt;
  ^
rc_markdown.c: At top level:
cc1: warning: unrecognized &lt;span class="nb"&gt;command &lt;/span&gt;line option ‘-Wno-self-assign’
cc1: warning: unrecognized &lt;span class="nb"&gt;command &lt;/span&gt;line option ‘-Wno-constant-logical-operand’
cc1: warning: unrecognized &lt;span class="nb"&gt;command &lt;/span&gt;line option ‘-Wno-parentheses-equality’
cc1: warning: unrecognized &lt;span class="nb"&gt;command &lt;/span&gt;line option ‘-Wno-tautological-compare’
compiling rc_render.c
rc_render.c: In &lt;span class="k"&gt;function&lt;/span&gt; ‘rndr_link_attributes’:
rc_render.c:287:28: warning: variable ‘rndr’ &lt;span class="nb"&gt;set &lt;/span&gt;but not used &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;-Wunused-but-set-variable&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
  struct rb_redcarpet_rndr &lt;span class="k"&gt;*&lt;/span&gt;rndr&lt;span class="p"&gt;;&lt;/span&gt;
                            ^
rc_render.c: At top level:
cc1: warning: unrecognized &lt;span class="nb"&gt;command &lt;/span&gt;line option ‘-Wno-self-assign’
cc1: warning: unrecognized &lt;span class="nb"&gt;command &lt;/span&gt;line option ‘-Wno-constant-logical-operand’
cc1: warning: unrecognized &lt;span class="nb"&gt;command &lt;/span&gt;line option ‘-Wno-parentheses-equality’
cc1: warning: unrecognized &lt;span class="nb"&gt;command &lt;/span&gt;line option ‘-Wno-tautological-compare’
compiling stack.c
linking shared-object redcarpet.so
redcarpet.so: 最后的关闭失败: 无效的操作
collect2: error: ld returned 1 &lt;span class="nb"&gt;exit &lt;/span&gt;status
Makefile:257: recipe &lt;span class="k"&gt;for &lt;/span&gt;target &lt;span class="s1"&gt;'redcarpet.so'&lt;/span&gt; failed
make: &lt;span class="k"&gt;***&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;redcarpet.so] Error 1

make failed, &lt;span class="nb"&gt;exit &lt;/span&gt;code 2

Gem files will remain installed &lt;span class="k"&gt;in&lt;/span&gt; /home/kevin/.rbenv/versions/2.4.3/lib/ruby/gems/2.4.0/gems/redcarpet-3.4.0 &lt;span class="k"&gt;for &lt;/span&gt;inspection.
Results logged to /home/kevin/.rbenv/versions/2.4.3/lib/ruby/gems/2.4.0/extensions/x86_64-linux/2.4.0-static/redcarpet-3.4.0/gem_make.out
&lt;/code&gt;&lt;/pre&gt;</description>
      <author>sqsy</author>
      <pubDate>Thu, 11 Jan 2018 01:08:30 +0800</pubDate>
      <link>https://ruby-china.org/topics/34867</link>
      <guid>https://ruby-china.org/topics/34867</guid>
    </item>
    <item>
      <title>写了一个腾讯云 UVS 的 Ruby SDK，在测试时显示 ERROR_CGI_PARAM [已解决]</title>
      <description>&lt;p&gt;&lt;strong&gt;在 Rails C 环境执行：&lt;/strong&gt;
&lt;code&gt;ret = Qcloudapi::Module::Video.list_folder(bucket_name,"/")&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;提示参数错误：&lt;/strong&gt;
&lt;code&gt;{"httpcode"=&amp;gt;400, "code"=&amp;gt;-5999, "message"=&amp;gt;"ERROR_CGI_PARAM", "data"=&amp;gt;{}}&lt;/code&gt;&lt;/p&gt;</description>
      <author>sqsy</author>
      <pubDate>Thu, 26 May 2016 23:08:00 +0800</pubDate>
      <link>https://ruby-china.org/topics/30137</link>
      <guid>https://ruby-china.org/topics/30137</guid>
    </item>
    <item>
      <title>整理学习 EventMachine 的一些文章和帖子</title>
      <description>&lt;p&gt;Some posts and articles about &lt;strong&gt;EventMachine&lt;/strong&gt;. &lt;del&gt;Mark&lt;/del&gt; it for later study&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ruby China:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;NodeJS 适合用来做什么？ (29 likes, 41 replies)
&lt;a href="http://ruby-china.org/topics/962" rel="nofollow" target="_blank"&gt;http://ruby-china.org/topics/962&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="/tmm1" class="user-mention" title="@tmm1"&gt;&lt;i&gt;@&lt;/i&gt;tmm1&lt;/a&gt; 教你 Eventmachine (21 likes, 15 replies)
&lt;a href="http://ruby-china.org/topics/13146" rel="nofollow" target="_blank"&gt;http://ruby-china.org/topics/13146&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;异步 IO 在 EventMachine 和 NodeJS 的写法对比 (13 likes, 35 replies)
&lt;a href="http://ruby-china.org/topics/11051" rel="nofollow" target="_blank"&gt;http://ruby-china.org/topics/11051&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;[讨论] EventMachine 和 Fiber (8 likes, 25 replies)
&lt;a href="http://ruby-china.org/topics/13565" rel="nofollow" target="_blank"&gt;http://ruby-china.org/topics/13565&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Is Node.js Better? (3 likes, 33 replies)
&lt;a href="http://ruby-china.org/topics/2517" rel="nofollow" target="_blank"&gt;http://ruby-china.org/topics/2517&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;让 ruby 5 秒之后执行一个任务 (2 likes, 21 replies)
&lt;a href="http://ruby-china.org/topics/8747" rel="nofollow" target="_blank"&gt;http://ruby-china.org/topics/8747&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;请问 Rack、ActiveResource、EventMachine 之间的区别和联系 (2 likes, 8 replies)
&lt;a href="http://ruby-china.org/topics/4409" rel="nofollow" target="_blank"&gt;http://ruby-china.org/topics/4409&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;求助：EventMachine 在 rails 中如何使用 (1 like, 18 replies)
&lt;a href="http://ruby-china.org/topics/13468" rel="nofollow" target="_blank"&gt;http://ruby-china.org/topics/13468&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;EventMachine 的使用 (1 like, 11 replies)
&lt;a href="http://ruby-china.org/topics/14951" rel="nofollow" target="_blank"&gt;http://ruby-china.org/topics/14951&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;求教，学习 EventMachine 时遇到的问题 (1 like, 11 replies)
&lt;a href="http://ruby-china.org/topics/1320" rel="nofollow" target="_blank"&gt;http://ruby-china.org/topics/1320&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;eventmachine 如何释放 socket 连接 (0 like, 5 replies)
&lt;a href="http://ruby-china.org/topics/12900" rel="nofollow" target="_blank"&gt;http://ruby-china.org/topics/12900&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Outside of Ruby China:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Research on EventMachine
&lt;a href="http://blog.csdn.net/resouer/article/details/7975550" rel="nofollow" target="_blank"&gt;http://blog.csdn.net/resouer/article/details/7975550&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;[翻译] 使用 EventMachine
&lt;a href="http://lunae.cc/play-with-eventmachine" rel="nofollow" target="_blank"&gt;http://lunae.cc/play-with-eventmachine&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Reactor 模式与非阻塞 I/O | Reactor Pattern and NIO&lt;br&gt;
&lt;a href="http://aofengblog.blog.163.com/blog/static/6317021201310293953286/" rel="nofollow" target="_blank"&gt;http://aofengblog.blog.163.com/blog/static/6317021201310293953286/&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;[翻译] 反应堆模式 
&lt;a href="http://blog.chinaunix.net/uid-20528042-id-1935072.html" rel="nofollow" target="_blank"&gt;http://blog.chinaunix.net/uid-20528042-id-1935072.html&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <author>sqsy</author>
      <pubDate>Sun, 09 Feb 2014 14:40:43 +0800</pubDate>
      <link>https://ruby-china.org/topics/17132</link>
      <guid>https://ruby-china.org/topics/17132</guid>
    </item>
  </channel>
</rss>
