* 2008年08月的日志

WebIM开发之通讯模式介绍

我打算写一个系列文章,介绍webim的方方面面,今天开始第一篇。

我之前发布了一个webim,那个im设计了前端UI、交互,后端程序和通讯只是随便写了一下。作为一个交互很多的web应用,良好的后端设计可以减少数据库访问、减轻服务器负载;良好的通讯模式更是可以较少服务器连接数、节省流量。这篇文章主要讲web即时通讯中常用的技术。

HTTP是无连接的,HTTP通讯过程基本就是:客户端发送请求给服务器,服务器接收请求给出响应信息,客户端接收响应信息显示在用户的显示器上,客户端断开连接。由此可知,要实现即时聊天中的”即时”,我们有两个办法:服务器抓住连接不断开和客户端不断的向服务器发起请求实现伪即时。当然用Flash XMLSocket可以实现真正的即时通讯,但这样已经不是使用HTTP协议了,HTTP天生的优势(无需另外开端口、自动穿越防火墙)也就无法体现。

Continue Reading »

QGYWEBIM有PHP+MYSQL版本了

这两天,手头活儿少了一点,我就抽空把QGYWEBIM移植到了PHP+MYSQL平台下,功能和之前发布的β1.4基本一致。因为是后端生成xml来传输数据,所以尽管我对php了解不多,但还是移植得很顺利。

比较郁闷的是,以前我是做windows平台开发的,众所周知windows是忽略文件大小写的,所以我的命名习惯是文件名单词首字母大写,html链接里文件名统统用小写。但是由于php多数是跑在linux下的,这样写有很大的问题。

我遇到的另外一个问题是:AJAX提交时,发送的内容用escape编码,php端不会自动解码,网上找了一个php的unescape函数在linux下有问题。后来我才发现在js端改用encodeURIComponent来编码,php端不用解码就是正常的。不过胡子说他已经让escape在linux也能工作了。

PHP+MySQL版测试地址:http://www.qgy18.com/lab/webim/

ASP+Access版测试地址:http://old.qgy18.com/webim

说明文档:http://old.qgy18.com/webim/readme.html

先放上去测试一段时间,我在会修复BUG后发布完整源代码的。

Firebug导致的验证码失效问题

Firebug,就不多介绍了,搞web开发的,尤其是关注前端的估计没人不知道这个插件。最近发现打开firebug在特定的情况下会导致页面验证码失效,在此记录一下。

打开firebug面板,选择网络下的图片tab,这里会记录当前页面上用到的图片url,鼠标移到记录上,firebug会显示出该图片。这本来是一个很人性化的设计,但是问题出在,firebug在显示图片的时候会再次请求服务器。这样如果鼠标移到验证码图片上,firebug向服务器去取,服务器会认为是用户刷新了验证码,重新生成一张验证码,但此时用户的页面上看到的验证码还是旧的,这样提交肯定会通不过。

Continue Reading »

Opera下自定义右键菜单的研究

Opera是一个来自挪威的浏览器,有着优秀的缓存机制,浏览网页速度很快,有着自己庞大的粉丝群。但是opera并没有支持上下文菜单事件,也就是说我们通常使用的依靠在页面中重写oncontextmenu事件来实现自定义右键菜单的方法不会工作。那么,有没有别的方法来实现自定义菜单呢?

我们来看看三个著名的产品(FckeditorYUIGoogle Doc)怎么解决opera没有oncontextmenu事件这个问题:

Continue Reading »

跨浏览器“复制到剪贴板”的解决方案

众所周知,firefox的安全性比较高,但是安全带来的弊端就是很多功能不支持。比如说在IE下可以通过脚本来设当前网页为首页,firefox却不行。今天要讨论的是另外一个问题:怎么在firefox等不支持window.clipboardData的浏览器下实现复制呢?

首先,我们来看网易邮箱是怎么解决这个问题的。我们在firefox下进到写邮件页面,点击编辑器上的全部功能,然后点击左边的“复制”按钮,“您的浏览器安全设置不允许编辑器自动执行拷贝操作,请使用键盘快捷键(Ctrl+C)来完成”,网易邮箱给了我们这么一个提示。我觉得这个解决方案可以得80分,因为它告诉了我们两个信息:其一,之所以复制操作没有完成是因为我的浏览器很安全,为了安全损失一点用户体验一般用户是可以接受的;其二,它还提示了我们可以通过键盘快捷键ctrl+c来完成操作,这对刚上网的新手来说很人性化。但是,有没有更好的解决方案呢?

Continue Reading »