<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>kehao</title>
    <link>https://ruby-china.org/kehao</link>
    <description></description>
    <language>en-us</language>
    <item>
      <title>为啥没人讨论下引力波？听说 Python 立了大功了～～</title>
      <description>&lt;p&gt;&lt;a href="http://www.iteye.com/news/31348" rel="nofollow" target="_blank"&gt;http://www.iteye.com/news/31348&lt;/a&gt;
&lt;a href="https://losc.ligo.org/s/events/GW150914/GW150914_tutorial.html" rel="nofollow" target="_blank"&gt;https://losc.ligo.org/s/events/GW150914/GW150914_tutorial.html&lt;/a&gt;
&lt;a href="https://github.com/ligo-cbc" rel="nofollow" target="_blank"&gt;https://github.com/ligo-cbc&lt;/a&gt;
有人关注引力波么？？？？&lt;/p&gt;</description>
      <author>kehao</author>
      <pubDate>Wed, 17 Feb 2016 10:40:30 +0800</pubDate>
      <link>https://ruby-china.org/topics/29009</link>
      <guid>https://ruby-china.org/topics/29009</guid>
    </item>
    <item>
      <title>郁闷啊，15 寸 mac 用了不到一年电源烧了</title>
      <description>&lt;p&gt;港行的，淘宝买的，用着用着突然“朴”一声爆了，官网上这东西 588，看来还是不能在淘宝上买这类东西啊，代保修太不靠谱了&lt;/p&gt;</description>
      <author>kehao</author>
      <pubDate>Wed, 07 May 2014 17:30:36 +0800</pubDate>
      <link>https://ruby-china.org/topics/19078</link>
      <guid>https://ruby-china.org/topics/19078</guid>
    </item>
    <item>
      <title>// 神奇。勿动。</title>
      <description>&lt;p&gt;半夜看了睡意全无～哈哈
&lt;a href="http://www.aqee.net/10-best-code-comments/" rel="nofollow" target="_blank"&gt;http://www.aqee.net/10-best-code-comments/&lt;/a&gt;&lt;/p&gt;</description>
      <author>kehao</author>
      <pubDate>Thu, 11 Jul 2013 01:12:57 +0800</pubDate>
      <link>https://ruby-china.org/topics/12412</link>
      <guid>https://ruby-china.org/topics/12412</guid>
    </item>
    <item>
      <title>求 Web 拓扑图，关系图解决方案</title>
      <description>&lt;p&gt;有没有像样的 js 库，Flex 哥们不太懂啊&lt;/p&gt;</description>
      <author>kehao</author>
      <pubDate>Tue, 19 Mar 2013 16:17:00 +0800</pubDate>
      <link>https://ruby-china.org/topics/9567</link>
      <guid>https://ruby-china.org/topics/9567</guid>
    </item>
    <item>
      <title>csdn 今日头条：做 iOS 开发，我为什么弃用 Objective-C 而选择 RubyMotion？</title>
      <description>&lt;p&gt;&lt;a href="http://www.csdn.net/article/2013-02-27/2814277-why-i-choose-rubymotion-but-not-objc-for-ios-dev" rel="nofollow" target="_blank"&gt;http://www.csdn.net/article/2013-02-27/2814277-why-i-choose-rubymotion-but-not-objc-for-ios-dev&lt;/a&gt;&lt;/p&gt;</description>
      <author>kehao</author>
      <pubDate>Thu, 28 Feb 2013 15:46:58 +0800</pubDate>
      <link>https://ruby-china.org/topics/9020</link>
      <guid>https://ruby-china.org/topics/9020</guid>
    </item>
    <item>
      <title>请教，移动平台即时通讯 (im) 后台架构</title>
      <description>&lt;p&gt;类似微信，但是同时在线人数要求并不太高（10 万人左右）&lt;/p&gt;

&lt;p&gt;因为我一直是做 web 开发的，并不太了解移动开发的一些禁忌，看了些有关微信的架构，也是比较模糊，主要是我该选什么协议，如何同步状态。微信的文档里说&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;“微信的协议
里面提到了 XMPP 和类 Sync 的自定义协议，里面提到 XMPP 的缺点是流量大和消息不可靠。但是流量大并非 XMPP 主要矛盾，可以很简单将其映射成二进制协议。消息 ACK 也可以添加简单的扩展协议来实现。较繁琐的还是兼容 CMWAP 网关的设计。
使用 XMPP 或者简化的 XMPP 标准协议有很多好处，类似的场景有业界广泛使用的 open api 基本都使用 HTTP 及 JSON，并不是由于这两种协议优化或高效，而是其简洁并得到广泛的认知。一种标准协议的认知及扩展成本要比一个自定义协议小得多，XMPP 流量大的问题可以通过转换协议来实现，比如用 binary 1 代表 login 等全部协商协议，2 代表 message，消息增量获取也可以通过自定义扩展协议来实现。标准协议可以让团队内部及新人的认知成本降低，每一个参与者都很容易想到代码及架构改进建议。而且微信目前也在构建开放平台，自定义协议在开放方面必然具备一些局限。”&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;本来理所当然想到 xmpp，nginx，ejabberd，是否还适用在手机 im 后台的开发？
类 Sync 协议是指微软的 Direct Push 协议么？这个是否可行，可以用来开发 im 否？
&lt;a href="http://www.cnblogs.com/fox23/archive/2008/05/17/directpush-exchangeserver2007-overview.html" rel="nofollow" target="_blank"&gt;http://www.cnblogs.com/fox23/archive/2008/05/17/directpush-exchangeserver2007-overview.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;求熟悉手机开发的同学给点思路，thanks very much&lt;/p&gt;</description>
      <author>kehao</author>
      <pubDate>Thu, 21 Feb 2013 17:44:25 +0800</pubDate>
      <link>https://ruby-china.org/topics/8831</link>
      <guid>https://ruby-china.org/topics/8831</guid>
    </item>
    <item>
      <title>请问 Rails 有没有做产品对比的 Gem?</title>
      <description>&lt;p&gt;如下图效果:
&lt;img src="//l.ruby-china.com/photo/a2d9a6ce25442a675478035fe42e9521.png" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;谢谢  &lt;/p&gt;</description>
      <author>kehao</author>
      <pubDate>Mon, 07 May 2012 11:27:34 +0800</pubDate>
      <link>https://ruby-china.org/topics/3124</link>
      <guid>https://ruby-china.org/topics/3124</guid>
    </item>
    <item>
      <title>Android 客户端 http 上传文件问题</title>
      <description>&lt;p&gt;hi 各位：
Android 客户端 http 上传文件和一般的浏览器上传文件有差异么？
本想测试一下 Android 应用的上传文件功能，就跑了个小的 rails 程序，f.write 最简单那种，用 chrome 插件测试，没有问题，但是后台 rails 程序死活接收不到 Android post 过来的数据.get 和 post 简单数据是没问题的，不知道有没有人遇到过~  &lt;/p&gt;</description>
      <author>kehao</author>
      <pubDate>Mon, 23 Apr 2012 21:20:03 +0800</pubDate>
      <link>https://ruby-china.org/topics/2843</link>
      <guid>https://ruby-china.org/topics/2843</guid>
    </item>
    <item>
      <title>nginx error_page 相关问题</title>
      <description>&lt;pre class="highlight plaintext"&gt;&lt;code&gt; server {
    listen 443 default ssl;
#client_max_body_size 20M;
    server_name localhost;
    keepalive_timeout 60;

    root /home/test/w/test/public;

    ssl  on;  
    ssl_certificate  /etc/ssl/private/server.crt;  
    ssl_certificate_key  /etc/ssl/private/server.key;  
    ssl_client_certificate   /etc/ssl/private/ca.crt;  
    ssl_session_timeout  5m;  
    ssl_verify_client on;  
    ssl_protocols  SSLv2 SSLv3 TLSv1;  
   # ssl_ciphers  ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;  
    ssl_prefer_server_ciphers   on;

    location / {
      proxy_redirect off;
      proxy_set_header Host $http_host;
      proxy_set_header X-Real-IP       $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Forwarded-Ssl on;
      proxy_set_header X-Forwarded-Proto https;

      client_max_body_size       10m;
      client_body_buffer_size    128k;

      proxy_connect_timeout      90;
      proxy_send_timeout         90;
      proxy_read_timeout         90;

      proxy_buffer_size          4k;
      proxy_buffers              4 32k;
      proxy_busy_buffers_size    64k;
      proxy_temp_file_write_size 64k;

      # If you don't find the filename in the static files
      # Then request it from the unicorn server
      if (!-f $request_filename) {
        proxy_pass http://unicorn_server;
        break;
      }
    }

    error_page 500 502 503 504 /500.html;
#   error_page 400  /400.html; 
#    location = /400.html {
#      internal;
#    }

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;当浏览器不提供证书时，会报 400，如下图&lt;/p&gt;

&lt;p&gt;&lt;img src="//l.ruby-china.com/photo/fb0899595ee042871d45d919dda8494e.png" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;我可能想要如下图：&lt;/p&gt;

&lt;p&gt;&lt;img src="//l.ruby-china.com/photo/5c3954449cb5518a4dbf5ffc8a98f333.gif" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;但是 error_page 不起作用：&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;error_page 400  "http://baidu.com";

&lt;/code&gt;&lt;/pre&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;error_page 400  /400.html;
    location = /400.html {
    internal;
}

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;可能执行到   ssl_verify_client on;  就直接抛了 400，请问这个状态码怎么抓？&lt;/p&gt;</description>
      <author>kehao</author>
      <pubDate>Fri, 13 Apr 2012 15:33:03 +0800</pubDate>
      <link>https://ruby-china.org/topics/2577</link>
      <guid>https://ruby-china.org/topics/2577</guid>
    </item>
    <item>
      <title>https uploadify 上传文件时报 IO Error</title>
      <description>&lt;p&gt;swfuploadoc 里写道：&lt;/p&gt;

&lt;p&gt;SSL&lt;/p&gt;

&lt;p&gt;有一些报告指出，Flash 播放器不能通过 SSL 协议上传。此问题还没有确认，但是绕过 SSL 上传的文件可能是不可靠的。尤其要注意的是，使用自行签约的 SSL 证书可能存在问题。&lt;/p&gt;

&lt;p&gt;另外，由于 Flash 没有提供用于接受 SSL 证书的方法，那么从不被信任的认证机构获取的 SSL 证书将无效。我们已经注意到此问题，就像 cookie bug 一样，Windows 平台上的 Flash 可以通过互联网浏览器来获取被信任的 CA。&lt;/p&gt;

&lt;p&gt;现在的状况也和上面说的一样，nginx 双向认证，证书是自签发的，ie 下可以使用 uploadify 上传文件，但是 FF 和 chrome 报 ioerror.网上又瞎找了些解决方法&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Linux 下的解决办法：
kriner Says: 
September 30, 2009 - 9:45am
Flashplayer does'nt read the firefox certificates store, but the default CA certificates store located in the /etc/ssl/certs/ directory.
You can add your own CA certificate with the following shell command:
update-ca-certificates
Exemple (for Debian or Ubuntu users):
(obviously, you need to be root)
your organization is named 'myorg' and your CA certificate 'myorgCA.crt'
Create 'myorg' directory under /usr/share/ca-certificates
Copy your CA certificate in the new created directory
Edit /etc/ca-certificates.conf and add the following two lines (first line is for comemnt):
# My organization CA
myorg/myorgCA.crt
Then run:
update-ca-certificates -v
That's all.
Now it works with firefox.


&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;上面的方法没有效果，有没有人起效果过？
后来又搜到 (比较老了)
&lt;a href="http://www.uploadify.com/forums/discussion/6650" rel="nofollow" target="_blank"&gt;http://www.uploadify.com/forums/discussion/6650&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;请问这真是证书可信度的问题么？另外有没有方法可以解决自签发的证书也能使用 uploadify？？
谢谢  &lt;/p&gt;</description>
      <author>kehao</author>
      <pubDate>Wed, 11 Apr 2012 17:36:21 +0800</pubDate>
      <link>https://ruby-china.org/topics/2531</link>
      <guid>https://ruby-china.org/topics/2531</guid>
    </item>
    <item>
      <title>不能 Marshal.dump 分页数据??</title>
      <description>&lt;p&gt;偶尔发现不能 Marshal.dump 分页数据，这怎么回事？现在 will_paginate 和 kaminari 都返回 ActiveRecord::Relation 了&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt; &lt;span class="no"&gt;Marshal&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dump&lt;/span&gt; &lt;span class="no"&gt;Question&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;where&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
 &lt;span class="c1"&gt;#=&amp;gt; "\x04\bo:\eActiveRecord::Relation':\v.....&lt;/span&gt;

 &lt;span class="no"&gt;Marshal&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dump&lt;/span&gt; &lt;span class="no"&gt;Question&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;where&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;page&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;#TypeError: can't dump anonymous class #&amp;lt;Module:0x00000003ea17f0&amp;gt;&lt;/span&gt;
&lt;span class="c1"&gt;#   from (irb):16:in `dump'&lt;/span&gt;
&lt;span class="c1"&gt;#   from (irb):16&lt;/span&gt;
&lt;span class="c1"&gt;#   from /home/qiu/.rvm/gems/ruby-1.9.3-p0/gems/railties-#3.2.2/lib/rails/commands/console.rb:47:in `start'&lt;/span&gt;
&lt;span class="c1"&gt;#   from /home/qiu/.rvm/gems/ruby-1.9.3-p0/gems/railties-#3.2.2/lib/rails/commands/console.rb:8:in `start'&lt;/span&gt;
&lt;span class="c1"&gt;#   from /home/qiu/.rvm/gems/ruby-1.9.3-p0/gems/railties-#3.2.2/lib/rails/commands.rb:41:in `&amp;lt;top (required)&amp;gt;'&lt;/span&gt;
&lt;span class="c1"&gt;#   from script/rails:6:in `require'&lt;/span&gt;
&lt;span class="c1"&gt;#   from script/rails:6:in `&amp;lt;main&amp;gt;'&lt;/span&gt;



&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Marshal can't dump following objects:&lt;/p&gt;

&lt;p&gt;anonymous Class/Module.&lt;/p&gt;

&lt;p&gt;objects which related to its system (ex: Dir, File::Stat, IO, File, Socket and so on)&lt;/p&gt;

&lt;p&gt;an instance of MatchData, Data, Method, UnboundMethod, Proc, Thread, ThreadGroup, Continuation&lt;/p&gt;

&lt;p&gt;objects which defines singleton methods&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;get_answers&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;page&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
   &lt;span class="no"&gt;Rails&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;cache&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fetch&lt;/span&gt; &lt;span class="s2"&gt;"test1/&lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;page&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; 
     &lt;span class="n"&gt;answers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;page&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;page&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
   &lt;span class="k"&gt;end&lt;/span&gt;
 &lt;span class="k"&gt;end&lt;/span&gt;



&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;上面的就不能用了，这怎么解决？？
active_support/cache.rb
&lt;a href="/value" class="user-mention" title="@value"&gt;&lt;i&gt;@&lt;/i&gt;value&lt;/a&gt; = Marshal.dump(value)  &lt;/p&gt;</description>
      <author>kehao</author>
      <pubDate>Wed, 21 Mar 2012 14:25:14 +0800</pubDate>
      <link>https://ruby-china.org/topics/2025</link>
      <guid>https://ruby-china.org/topics/2025</guid>
    </item>
    <item>
      <title>上海2012年3月30日Cloud Foundry 云开发者大会</title>
      <description>&lt;p&gt;北京 2012 年 3 月 28 日
&lt;a href="http://cloudfoundry2012.csdn.net/shanghai.html" rel="nofollow" target="_blank"&gt;http://cloudfoundry2012.csdn.net/shanghai.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;顺便问下 unicorn 一个 master 进程开几个 worker 进程比较合适，和计算机核心数量有没有什么关系？ &lt;/p&gt;</description>
      <author>kehao</author>
      <pubDate>Wed, 29 Feb 2012 13:00:47 +0800</pubDate>
      <link>https://ruby-china.org/topics/1497</link>
      <guid>https://ruby-china.org/topics/1497</guid>
    </item>
    <item>
      <title>请教 Cloud Foundry 中 mongodb_gateway 与 mongodb_node 有什么用？</title>
      <description>&lt;p&gt;如何为 Cloud Foundry 添加自己的服务？&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;
+----------+---------+-------------------------------+
| Service  | Version | Description                   |
+----------+---------+-------------------------------+
| mongodb  | 1.8     | MongoDB NoSQL store           |
| mysql    | 5.1     | MySQL database service        |
| neo4j    | 1.4     | Neo4j NOSQL store             |
| rabbitmq | 2.4     | RabbitMQ message queue        |
| redis    | 2.2     | Redis key-value store service |
+----------+---------+-------------------------------+

&lt;/code&gt;&lt;/pre&gt;</description>
      <author>kehao</author>
      <pubDate>Thu, 23 Feb 2012 12:04:09 +0800</pubDate>
      <link>https://ruby-china.org/topics/1381</link>
      <guid>https://ruby-china.org/topics/1381</guid>
    </item>
    <item>
      <title>求教,学习 EventMachine 时遇到的问题</title>
      <description>&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="no"&gt;EM&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;epoll&lt;/span&gt;

&lt;span class="no"&gt;EM&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;run&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;

  &lt;span class="nb"&gt;trap&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"TERM"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;stop&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'pid'&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="nb"&gt;trap&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"INT"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;stop&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'pid'&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="no"&gt;Router&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;config&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="no"&gt;Router&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;info&lt;/span&gt; &lt;span class="s2"&gt;"Starting VCAP Router (&lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="no"&gt;Router&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;version&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;)"&lt;/span&gt;
  &lt;span class="no"&gt;Router&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;info&lt;/span&gt; &lt;span class="s2"&gt;"Listening on: &lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;inet&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;:&lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;port&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;inet&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;port&lt;/span&gt;

  &lt;span class="no"&gt;Router&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;inet&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;inet&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="no"&gt;VCAP&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;local_ip&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'local_route'&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
  &lt;span class="no"&gt;Router&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;port&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;port&lt;/span&gt;

  &lt;span class="c1"&gt;# If the sock paramater is set, this will override the inet/port&lt;/span&gt;
  &lt;span class="c1"&gt;# for unix domain sockets&lt;/span&gt;
  &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;fn&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'sock'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="no"&gt;File&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;unlink&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fn&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="no"&gt;File&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;exists?&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fn&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="no"&gt;Router&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;info&lt;/span&gt; &lt;span class="s2"&gt;"Listening on unix domain socket: '&lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;fn&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;'"&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;

  &lt;span class="c1"&gt;# Hack for running on BVTs on Macs which default to 256 FDs per process&lt;/span&gt;
  &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="no"&gt;RUBY_PLATFORM&lt;/span&gt; &lt;span class="o"&gt;=~&lt;/span&gt; &lt;span class="sr"&gt;/darwin/&lt;/span&gt;
    &lt;span class="k"&gt;begin&lt;/span&gt;
      &lt;span class="no"&gt;Process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setrlimit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="no"&gt;Process&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;RLIMIT_NOFILE&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4096&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;rescue&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;
      &lt;span class="no"&gt;Router&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;info&lt;/span&gt; &lt;span class="s2"&gt;"Failed to modify the socket limit: &lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
    &lt;span class="k"&gt;end&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;

  &lt;span class="no"&gt;EM&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;set_descriptor_table_size&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;32768&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# Requires Root privileges&lt;/span&gt;
  &lt;span class="no"&gt;Router&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;info&lt;/span&gt; &lt;span class="s2"&gt;"Socket Limit:&lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="no"&gt;EM&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;set_descriptor_table_size&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;

  &lt;span class="n"&gt;create_pid_file&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'pid'&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;

  &lt;span class="no"&gt;NATS&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;on_error&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;kind_of?&lt;/span&gt; &lt;span class="no"&gt;NATS&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;ConnectError&lt;/span&gt;
      &lt;span class="no"&gt;Router&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"EXITING! NATS connection failed: &lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
      &lt;span class="nb"&gt;exit!&lt;/span&gt;
    &lt;span class="k"&gt;else&lt;/span&gt;
      &lt;span class="no"&gt;Router&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"NATS problem, &lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;end&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;

  &lt;span class="no"&gt;EM&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;error_handler&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;
    &lt;span class="no"&gt;Router&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;error&lt;/span&gt; &lt;span class="s2"&gt;"Eventmachine problem, &lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
    &lt;span class="no"&gt;Router&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;backtrace&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;

  &lt;span class="k"&gt;begin&lt;/span&gt;
    &lt;span class="c1"&gt;# TCP/IP Socket&lt;/span&gt;
    &lt;span class="no"&gt;Router&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;server&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;EM&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;start_server&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;inet&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;port&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;ClientConnection&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kp"&gt;false&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;inet&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;port&lt;/span&gt;
    &lt;span class="no"&gt;Router&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;local_server&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;EM&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;start_server&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fn&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kp"&gt;nil&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;ClientConnection&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kp"&gt;true&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;fn&lt;/span&gt;
  &lt;span class="k"&gt;rescue&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;
    &lt;span class="no"&gt;Router&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fatal&lt;/span&gt; &lt;span class="s2"&gt;"Problem starting server, &lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
    &lt;span class="nb"&gt;exit&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;求教 
1,EM.epoll 是什么意思？网上看了似懂非懂的&lt;/p&gt;

&lt;p&gt;2,
  trap("TERM") { stop(config['pid']) }
  trap("INT")  { stop(config['pid']) }
 这是什么意思，谢谢  &lt;/p&gt;</description>
      <author>kehao</author>
      <pubDate>Tue, 21 Feb 2012 03:12:40 +0800</pubDate>
      <link>https://ruby-china.org/topics/1320</link>
      <guid>https://ruby-china.org/topics/1320</guid>
    </item>
  </channel>
</rss>
