说在前面
最近听了一场聊天系统设计的分享之后,想研究下不同技术架构不同语言组合下的chat application的实现。今天抽空翻出了以前敲过的基于lift的一个实现版本,原来是《Simply Lift》中的一个sample application。lift是由scala编写的web framework,这个版本的实现采用Comet方式通过HTTP连接的保持完成页面的实时刷新。
开发环境
- Mac OSX 10.8.5
- sbt 0.13.1
- scala 2.10.4
~~~~ - intellij 14.0.1 Community Edition
Step By Step
安装sbt环境
1 | $ brew install sbt |
配置项目骨架插件
1 | $ mkdir ~/.sbt/0.13/plugins |
新建项目
1 | $ mkdir chat-app-liftweb-version |
生成项目骨架
1 | $ sbt np |
配置project的dependency
1 | $ vim build.sbt |
配置sbt plugin
1 | $ vim project/plugins.sbt |
下载scala, sbt plugin和dependency
1 | $ sbt update |
生成Intellij相关的项目文件,便于import到Intellij中进行后续开发
1 | $ sbt gen-idea |
启动jetty,http://localhost:8080/
1 | $ sbt ~container:start |
代码分析
详细代码可参考https://github.com/zhouhualei/chat-app-liftweb-version,这里只对核心代码做下简单分析。
HTML页面
只有一个主页面,完整路径为src/main/webapp/index.html
1 |
|
聊天表单(ChatIn)
表单提交时,将内容发送给ChatServer,完整路径为src/main/scala/code/snippet/ChatIn
1 |
|
聊天服务器(ChatServer)
利用Actor并发模型,同时维护多个clients的服务,当聊天记录发生变化时,通知Chat让其通过Comet方式刷新浏览器页面。完整路径为src/main/scala/code/comet/ChatServer
1 | package code.comet |
聊天记录(Chat)
负责页面的实时刷新,通过注册ChatServer,当ChatServer收到message时,会得到通知。完整路径为src/main/scala/code/comet/Chat
1 |
|
UI效果
Resource
- Simply Lift, http://simply.liftweb.net
- Lift Cookbook, http://chimera.labs.oreilly.com/books/1234000000030/index.html
订阅我的微信公众号,您将即时收到新博客提醒!