Oschat IM 开源即时通讯项目介绍 - FengJ的个人页面 - 开源中国社区
Oschat IM 开源即时通讯项目介绍 - FengJ的个人页面 - 开源中国社区
Oschat IM 开源即时通讯项目介绍
255人收藏此文章, 我要收藏 发表于5天前(2013-08-28 11:36) , 已有6412次阅读 ,共85个评论目录:[ - ]
Oschat IM
一、Oschat Server
1、为什么选择Akka
2、Oschat中的Akka
二、Oschat Client
三、开源
Oschat IMOschat IM是一个开源的即时通信项目,包括基于websocket的服务器端和基于node-webkit的客户端。为什么我要做这个项目,一是先有的开源即时通讯项目很少,多数企业是选择Openfire+Spark进行二次开发,或者采购腾讯通这样的产品进行业务的集成。二是这样的开源项目的客户端基本是采用Swing或者c++编写,相对于node-webkit采用html5+js进行开发的,重写修改起来对开发人员的要求要高得多,精通web开发的人员数量也多的多。用html5写出来的界面也更加美观方便。这就是我做这个的初衷。
一、Oschat ServerOschat IM的服务器端架构主要基于Akka+Servlet。客户端与服务器端的通信数据格式用的是json,这里并没有打算去实现XMPP规范,因为我们不需要与其他IM进行通信。我也懒得去研究XMPP了。Servlet作为与客户端通信的接口,当websocket接受到消息便交给Akka系统处理,Akka会找到接受消息人的MessageInbound实例,然后把消息发送给接受人的客户端。
1、为什么选择AkkaAkka 是一个用 Scala 编写的库,用于简化编写容错的、高可伸缩性的 Java 和 Scala 的 Actor 模型应用。它已经成功运用在电信行业。系统几乎不会宕机(高可用性 99.9999999 % 一年只有 31 ms 宕机。
Akka的特点:
1.更加简单的并发策略Simpler Concurrency,通过Actors STM & Transactors能够简化编写可靠的并行计算。
2.EDA架构Event-driven Architecture,完美的异步事件驱动架构,不会堵塞。
3.真正的可伸缩性,使用异步消息在多核以及多个节点之间扩展。
4.容错性,重视失败。
5.远程透明性Actor模型并非什么新鲜事物,它由Carl Hewitt于上世纪70年代早期提出,目的是为了解决分布式编程中一系列的编程问题。其特点如下:
系统中的所有事物都可以扮演一个Actor
Actor之间完全独立
在收到消息时Actor所采取的所有动作都是并行的,在一个方法中的动作没有明确的顺序
Actor由标识和当前行为描述
Actor可能被分成原始(primitive)和非原始(non primitive)类别
非原始Actor有
由一个邮件地址表示的标识
当前行为由一组知识(acquaintances)(实例变量或本地状态)和定义Actor在收到消息时将采取的动作组成
消息传递是非阻塞和异步的,其机制是邮件队列(mail-queue)
所有消息发送都是并行的2、Oschat中的Akka
在Oschat中使用Akka作为消息的分发核心,这里有一个核心的MainActor和一个Main WebSocketServlet,可以把它看做为是邮局。而每一个在线用户作为作为它Child Actor,每个用户的主键作为Actor的标识。每个Actor对象里面放了用户对象和多个WebSocket通信对象,比如有 A 和 B 在聊天,那么当A,B分别登录的时候MainActor会创建A.Actor 和 B.Actor。当A发送一条信息给B的时候,会先创建一个WebSocket对象,以<B.id,Socket> B.id 作为键值对放在A.Actor中,然后把消息发给MainActor,MainActor会告诉B 有人想跟你聊天,B接受后同样会创建 <A.id,Socket>,这样MainActor把消息发给 B.Actor的时候,B.Actor根据消息的来源人的id获取对应的WebSocket对象,最后把消息写给客户端。
二、Oschat Client
Oschat 的客户端使用了node-webkit进行开发,选择node-webkit的主要原因是html5,还有node-webkit已经很成熟,已经有不少基于它的商业产品【https://github.com/rogerwang/node-webkit/wiki/List-of-apps-and-companies-using-node-webkit】,而且在git上面很活跃。
下面是目前界面的两个截图, 自己看着都觉得很丑啊! 猪哥,答应我的设计图呢~~
三、开源
开源地址: Osc@Git http://git.oschina.net/for-1988/oschat
WebSocket感觉已经比较成熟的了,支持二进制传输,已有基于WebSocket的商业视频通讯。文件传输、视频音频将是我下面主要做的事情。
Oschat IM 开源即时通讯项目介绍 - FengJ的个人页面 - 开源中国社区的更多相关文章
- GGTalk——C#开源即时通讯系统源码介绍系列(一)
坦白讲,我们公司其实没啥技术实力,之所以还能不断接到各种项目,全凭我们老板神通广大!要知道他每次的饭局上可都是些什么人物! 但是项目接下一大把,就凭咱哥儿几个的水平,想要独立自主.保质保量保期地一个个 ...
- GGTalk ——C#开源即时通讯系统
http://www.cnblogs.com/justnow/ GGTalk ——C#开源即时通讯系统 下载中心 GGTalk(简称GG)是可在广域网部署运行的QQ高仿版,2013.8.7发布GG ...
- 即时通信系统中实现全局系统通知,并与Web后台集成【附C#开源即时通讯系统(支持广域网)——QQ高仿版IM最新源码】
像QQ这样的即时通信软件,时不时就会从桌面的右下角弹出一个小窗口,或是显示一个广告.或是一个新闻.或是一个公告等.在这里,我们将其统称为“全局系统通知”.很多使用C#开源即时通讯系统——GGTalk的 ...
- iOS开发小技巧--即时通讯项目:消息发送框(UITextView)高度的变化; 以及UITextView光标复位的小技巧
1.即时通讯项目中输入框(UITextView)跟随输入文字的增多,高度变化的实现 最主要的方法就是监听UITextView的文字变化的方法- (void)textViewDidChange:(UIT ...
- iOS开发小技巧--即时通讯项目:使用富文本在UILabel中显示图片和文字;使用富文本占位显示图片
Label借助富文本显示图片 1.即时通讯项目中语音消息UI的实现,样式如图: 借助富文本在UILabel中显示图片和文字 // 1.创建一个可变的富文本 NSMutableAttributedStr ...
- 即时通信系统中实现聊天消息加密,让通信更安全【低调赠送:C#开源即时通讯系统(支持广域网)——GGTalk4.5 最新源码】
在即时通讯系统(IM)中,加密重要的通信消息,是一个常见的需求.尤其在一些政府部门的即时通信软件中(如税务系统),对即时聊天消息进行加密是非常重要的一个功能,因为谈话中可能会涉及到机密的数据.我在最新 ...
- 新一代开源即时通讯应用源码定制 运营级IM聊天源码
公司介绍:我们是专业的IM服务提供商!哇呼Chat是一款包含android客户端/ios客户端/pc客户端/WEB客户端的即时通讯系统.本系统完全自主研发,服务器端源码直接部署在客户主机.非任何第三方 ...
- 开源即时通讯GGTalk 8.0发布,增加Linux客户端,支持在统信UOS、银河麒麟上运行!
GGTalk在2021年推出7.0后,经过一年多时间的开发,终于推出8.0版本,实现了Linux客户端. 这几年,信创国产化的势头越来越猛,政府事企业单位都在逐步转向使用国产OS.国产CPU.国产数据 ...
- 即时通讯协议之XMPP
目前IM即时通信有四种协议 1.即时信息和空间协议(IMPP) 2.空间和即时信息协议(PRIM) 3.针对即时通讯和空间平衡扩充的进程开始协议SIP 4.XMPP协议: 该协议的前身是Jabber, ...
随机推荐
- jquery 如何动态添加、删除class样式方法介绍
获取与设置样式 获取class和设置class都可以使用attr()方法来完成.例如使用attr()方法来获取p元素的class 取与设置样式 获取class和设置class都可以使用attr()方法 ...
- perl 继承 @ISA
12.5 类继承 对Perl的对象剩下的内容而言,从一个类继承另外一个类并不需要给这门语法增加特殊的语法,当你调用一个方法的时候, 如果Perl在调用者的包里找不到这个字过程,那么他就检查@ISA数组 ...
- 使用boost中的property_tree实现配置文件
property_tree是专为配置文件而写,支持xml,ini和json格式文件 ini比较简单,适合简单的配置,通常可能需要保存数组,这时xml是个不错的选择. 使用property_tr ...
- 最简单的基于FFMPEG+SDL的视频播放器 ver2 (採用SDL2.0)
===================================================== 最简单的基于FFmpeg的视频播放器系列文章列表: 100行代码实现最简单的基于FFMPEG ...
- iOS依据字符串计算UITextView高度
iOS计算字符串高度,有须要的朋友能够參考下. 方法一:ios7.0之前适用 /** @method 获取指定宽度width,字体大小fontSize,字符串value的高度 @param value ...
- Appium 的安装启动
Appium 的安装方式根据官网提供的是使用nodejs 安装,但是官方给出了三种方法 参考网址: appium下载地址: https://bitbucket.org/appium/appium.ap ...
- RHEL4 i386下安装rdesktop【原创】
http://rpmfind.net/ 1.根据系统下载rdesktop (1)查看Linux版本:# lsb_release -aLSB Version: :core-3.0-ia32:core-3 ...
- 如何将自定义标签封装成一个Jar包
当我们在一个web应用中开发好一些自定义标签的时候,这些自定义标签通常有标签处理器Java类,和一个描述这些标签tld文件,如果我们想在以后别的web工程中还能用上这些标签,可以将这些自定义标签封装在 ...
- linux pthread之学习篇
在应用程序编程中,为了不影响与用户交互的性能,通常需要创建新的线程来处理一些比较耗时的. 不影响用户体验的工作.而这又通常分为两种情况: (1)需要临时创建一个线程来做某件特定的事,等事情做完时线程即 ...
- Spring4 MVC 多文件上传(图片并展示)
开始需要在pom.xml加入几个jar,分别是 <dependency> <groupId>commons-fileupload</groupId> <art ...