300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > im服务器开源项目 Oschat IM 开源即时通讯项目介绍

im服务器开源项目 Oschat IM 开源即时通讯项目介绍

时间:2021-02-20 16:55:46

相关推荐

im服务器开源项目 Oschat IM 开源即时通讯项目介绍

Oschat IM

Oschat IM是一个开源的即时通信项目,包括基于websocket的服务器端和基于node-webkit的客户端。为什么我要做这个项目,一是先有的开源即时通讯项目很少,多数企业是选择Openfire+Spark进行二次开发,或者采购腾讯通这样的产品进行业务的集成。二是这样的开源项目的客户端基本是采用Swing或者c++编写,相对于node-webkit采用html5+js进行开发的,重写修改起来对开发人员的要求要高得多,精通web开发的人员数量也多的多。用html5写出来的界面也更加美观方便。这就是我做这个的初衷。

一、Oschat Server

Oschat IM的服务器端架构主要基于Akka+Servlet。客户端与服务器端的通信数据格式用的是json,这里并没有打算去实现XMPP规范,因为我们不需要与其他IM进行通信。我也懒得去研究XMPP了。Servlet作为与客户端通信的接口,当websocket接受到消息便交给Akka系统处理,Akka会找到接受消息人的MessageInbound实例,然后把消息发送给接受人的客户端。

1、为什么选择Akka

Akka 是一个用 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 作为键值对放在A.Actor中,然后把消息发给MainActor,MainActor会告诉B 有人想跟你聊天,B接受后同样会创建,这样MainActor把消息发给 B.Actor的时候,B.Actor根据消息的来源人的id获取对应的WebSocket对象,最后把消息写给客户端。

二、Oschat Client

下面是目前界面的两个截图, 自己看着都觉得很丑啊! 猪哥,答应我的设计图呢~~

三、开源

WebSocket感觉已经比较成熟的了,支持二进制传输,已有基于WebSocket的商业视频通讯。文件传输、视频音频将是我下面主要做的事情。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。