试用canhaschat插件,实现web即时通讯

先给出地址:
[url]http://code.google.com/p/canhaschat/[/url]

再给出试用环境:
ubuntu 7.1
ruby 1.8.6
rails 2.0.2 (并不是必须的,1.2.6以上就行)
xmpp4r 0.3.2 (XMPP4R (http://xmpp4r.rubyforge.org/) 安装:sudo gem install xmpp4r)
json 1.1.2(JSON (http://json.rubyforge.org/), 安装:sudo gem install json)
canhaschat是什么版本的不清楚,反正是2008年2月左右的。
openfire 3.4.5 (jabber服务器,java的,需要jdk支持)
jdk 1.6 (1.5以上就可以,用来运行openfire)

虽然在README上看好象是挺简单的,但实际上还是有不少陷阱的。

先创建一个rails应用:testchat。配好数据库之类。

进入testchat目录,然后安装插件:

./script/plugin install http://canhaschat.googlecode.com/svn/trunk/canhaschat


生成:

./script/generate chat_system chat_user chat


chat_system是指生成整个web通讯系统,chat_user是model名,chat是controller名。

生成后配置一下config/chat_server.yml,主要是把use_anonymous_jabber设为false,这样传送用户名才不会出错。似乎chat_server.rb里的逻辑判断有点问题,这里搞了好长时间。而且出错总是一个未知错误,要看日志或跟踪进去才能搞清真正的错误。

另外jabber_server设置为jabber服务器地址,一般是localhost。它是根据这个去连接openfire的。

jabber_realm这个是域名,在配置openfire的时候输入的域名,不管是什么名字都要保证dns指向本机。

openfire的安装不复杂,基本上设好jdk后就可以启动了,进入9090的管理端口,然后配置一下。不过要事先配好它的数据库,支持mysql。

在openfire里创建两个用户备用,用来互发。

试着启动一下chat_server :

./script/chat_server start


一般来说都能正常启动,因为基本上仅仅是启动了一个drb server,并没有实际连接jabber server。可以查看logs/development.chat_server.log ,了解运行情况,如果需要debug信息,则配置 chat_server.yml,设log_level=debug

再启动mongrell

mongrel_rails start -S ./chat_mongrel_handler.rb


这时候访问 http://localhost:3000/chat,会出现很多输入框。前两个是进入openfire的用户名和密码。

jabber的登录基本上由几部分构成:
用户名:在openfire里创建。
域名:在初始openfire配置的时候设置,在chat_server.yml里配置。
密码:在openfire里创建,在输入框里输入。
服务器地址:在chat_server.yml里配置。端口缺省是5222,加密为可选。

填好后就start chat。

如果幸运的话应该是可以进入一个比较简陋的页面,最上面是发过来的话,中间是好友列表,最下面是发送的话。先点一下某好友,再输入要发的话,再点Send。

要测试的用户最好是事先用客户端先测过,相互加好友。pidgin和Spark都是不错的客户端。

这里还有几个问题,发送消息时可能会遇到。
一是CanHasChat::Remote::MustSupplyPassword无法找到定义,简单地处理就是在ChatController里去掉就行了。
二是去掉所有的transports后会出错。transports就是经过jabber server去连接其他的即时通讯软件(如:aim, icq, google等)。在model和chat_server.yml里可以去掉transports。但实际上有点问题,是在chat_server.rb里的方法get_transport,只判断tid是否为nil,而没有判断是否为空字符串,第一句改为:

if tid!=nil && !tid.empty?


总之出现问题就查看日志,如果是发送消息或接收消息的问题,就用firebug看连接的返回,缺省的情况下错误是不会显示出来的,只能看response了。

它的结构有点复杂,ajax通过mongrel handle来实现push,然后与一个独立的chat server进行交互(drb),最后是连接jabber server。

ajax实际上是启动了一个周期为30s的长连接,是一种轮询+长连接的方式,一旦到了30s就自动结束,并且再启动一个相同的30s长连接。

当然了,只要一有消息就立即返回给 ajax,并不会到30s再返回,这样保证了即时性。

chat server里用了callback的方式来接受消息,这得益于xmpp4r的运行方式。

经过一系列摸索后,完全可以比较好地实现一个web即时通讯,在rails之上,与rails的结合也比较方便。使用纯ajax,没有用flash插件来实现长连接。不过它使用了mongrel handle,所以必须要启动mongrel并且加载handle。

实际上长连接是可以不需要通过mongrel的,但是使用mongrel handle的性能比较好,绕过了rails,因为rails对这方面的处理是很糟的。

canhaschat处理错误是很糟糕的,这方面在实际使用的时候一定要注意,要及时将错误写入日志,并且要作必要的提示。
WebIM说明 WebIM是一款基于jQuery的一款web即时通讯插件,姑且这么称呼吧。插件最大程度实现了IM的常用功能,除即时通讯的常用功能外,还加入了:消息盒子、窗口抖动、添加删除好友、最近联系人、超时登录界面、网站小秘书、聊天记录、发送频率限制、发送产品、发送名片、发送表情、产品分享、黑名单、举报、收藏、公告、智能网址过滤、消息提醒、修改资料、名片二维码、禁止粘贴、收起联系人列表、推荐好友等30余项改进。全浏览器兼容。 插件调用简单方便,只需在现有的web系统中加入几行代码,理论上可嵌入任何web系统。 2012年项目,已不再维护。 配置 $(function() { $(document).FnWebIM({ autoLogin :true, //boolean型,默认是否自动登录,true:自动登录,false:手动登录,默认为true msgRefreshTime :1000, //number型,消息刷新时间,单位为ms friendRefreshTime :10000, //number型,好友刷新时间,单位为ms showSecretary :true, //boolean型,默认是否显示小秘书,true:显示,false:不显示,默认为true noticeContent :"唐僧师徒历经千辛万苦,终于见到了佛祖……", //string型,公告内容 为空时不显示公告 sendPicture :true, //boolean型,是否允许发送图片,true:允许,false:不允许,默认为true msgMaxSize :300, //number型,单条消息最大允许字符 msgSound :false, //boolean型,是否开启声音提醒,true:开启,false:关闭,默认为true defaultWindow :"" //string型,登录后打开新聊天窗口,此处接收的参数为联系人的uid,否则会出错 }); }); 详细说明文档 http://www.zi-han.net/case/im/help.html 示例 http://www.zi-han.net/developer/721.html 注意 请在服务器(如localhost)环境下打开
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值