• Oschat IM 开源即时通讯项目介绍


    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 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,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的商业视频通讯。文件传输、视频音频将是我下面主要做的事情。
  • 相关阅读:
    面试十题(4)
    TS中给接口指定的成员?
    TS中定义泛型接口的两种方式
    ts中泛型的使用
    ts中类的属性的封装
    ts中接口的使用
    自定义hook的步骤
    react中如何使用useReducer?
    react中useContext的使用
    react 中useRef的作用
  • 原文地址:https://www.cnblogs.com/lexus/p/3296053.html
Copyright © 2020-2023  润新知