Rails 求助:EventMachine 在 rails 中如何使用。

prothro · August 20, 2013 · Last by prothro replied at August 26, 2013 · 6017 hits

在网上看到 许多关于 EventMachine 的使用。 我想做一个网页聊天的功能,想使用 基于长轮询的服务推 来做。 是否能用 EventMachine 来做。应该如何实现,大概是怎样的一个思路。 还有 我测试了在 action 中添加 EventMachine 然后 startServer 然后整个应用就阻塞在那里了。 我应该怎样使用 EventMachine 才能使应用不会出现这种状况。 真心求助:望有这方面经验的前辈们指导一下,小弟先谢谢了。

这有个例子,不知道你试过没 https://github.com/eventmachine/eventmachine/wiki/Code-Snippets 做聊天为什么不用 socket.io, websocket ?

这有个例子,不知道你试过没 https://github.com/eventmachine/eventmachine/tree/master/examples/guides/getting_started 做聊天为什么要在 rails 里用 ?

在 rails action 里加 em 的 startserver 等于加入一个死循环。需要你理解 eventmachine 的编程模式,你就明白了。

一般要配合 thin 来使用,那么所有 rails stack 的调用都是一个 em 事件的 callback。主要是 throw(:async)env['async_callback'] 的使用。不过一般很少有人会在 rails 里面这么用吧?上次还是 rails 3 测试 async_rails 的时候这么尝试过,现在不知道 rails 4 会不会要其它的 hack。

聊天你可以 thin+rack,或者 faye。 要不轮询也可以啊,hoho

做网页聊天用 websocket 吧,你可以试试这个: https://github.com/igrigorik/em-websocket

#2 楼 @allenwei 这个例子我看过了,我也搜索到了 websocket,不过他们都说 现在有的浏览器不支持 websocket,所以我就没有去了解了。socket。io 我还不知道。 那个例子的是通过命令行来模拟客户端,(我是新手),如果我做网页聊天的话,客户端是浏览器,我试了,可以链接这个 Server 但是不知道如何把返回的信息,通过发送 response 的方式来返回给浏览器。

#3 楼 @jjym 小弟愚笨,您的意思是分开?跪求大神再指导指导

#4 楼 @clc3123 小弟英语不好,不怎么理解 eventMachine 的编程模式,求指点一下。

thin+rack 和 faya 我待会搜搜看。 我现在就想用轮询来做呢,会不会容易一点。求指点

#5 楼 @lifuzho 现在的浏览器都支持?万一不止次会出现怎样的效果?我也不清楚

#1 楼 @zgm 谢谢。还给我请大神

各位前辈们,不好意思呢!下班就没有网络条件,所以现在才回复的你们

直接用 Socket.io 很简单的。网上一堆例子

#12 楼 @steven_yue 谢谢,我去找找

#8 楼 @prothro 以上大家都是推荐的长轮询或者 websocket 方案,要么是要对异步编程有了解,要么是浏览器支持不好。 短轮询,3 秒轮询这种,就容易得多,直接在 rails 里面做就可以。

#14 楼 @clc3123 我用 eventMachine 做的 server,遇到一个问题,是不是 eventMachine 这个框架不支持多线程呢,经理不让用短轮寻。

#15 楼 @prothro em 就是单线程,你可以用 thin 启多个服务进程。 http://rubygems.org/gems/thin/versions/2.0.0.pre thin 2.0 还支持 unix fork,省内存。

#16 楼 @clc3123 我看到网上有一些例子 用 em 写了 web 服务器的,那他们是如何处理许多请求的呢。单线程,那不是一个请求运行了一个长任务,其他的请求都得等到那个任务完成才能得到响应????

#16 楼 @clc3123 请问如何实现 web 聊天的,不同短轮寻

sqsy in 整理学习 EventMachine 的一些文章和帖子 mention this topic. 08 Sep 17:05
You need to Sign in before reply, if you don't have an account, please Sign up first.