Oschat IM 開源即時通信項目介紹

Oschat IM

    Oschat IM是一個開源的即時通訊項目,包括基於websocket的服務器端和基於node-webkit的客戶端。爲何我要作這個項目,一是先有的開源即時通信項目不多,多數企業是選擇Openfire+Spark進行二次開發,或者採購騰訊通這樣的產品進行業務的集成。二是這樣的開源項目的客戶端基本是採用Swing或者c++編寫,相對於node-webkit採用html5+js進行開發的,重寫修改起來對開發人員的要求要高得多,精通web開發的人員數量也多的多。用html5寫出來的界面也更加美觀方便。這就是我作這個的初衷。 html

1、Oschat Server

    Oschat IM的服務器端架構主要基於Akka+Servlet。客戶端與服務器端的通訊數據格式用的是json,這裏並無打算去實現XMPP規範,由於咱們不須要與其餘IM進行通訊。我也懶得去研究XMPP了。Servlet做爲與客戶端通訊的接口,當websocket接受到消息便交給Akka系統處理,Akka會找到接受消息人的MessageInbound實例,而後把消息發送給接受人的客戶端。 html5

一、爲何選擇Akka

    Akka 是一個用 Scala 編寫的庫,用於簡化編寫容錯的、高可伸縮性的 Java 和 Scala 的 Actor 模型應用。它已經成功運用在電信行業。系統幾乎不會宕機(高可用性 99.9999999 % 一年只有 31 ms 宕機。 node

    Akka的特色: c++

  • 1.更加簡單的併發策略Simpler Concurrency,經過Actors STM & Transactors可以簡化編寫可靠的並行計算。
  • 2.EDA架構Event-driven Architecture,完美的異步事件驅動架構,不會堵塞。
  • 3.真正的可伸縮性,使用異步消息在多核以及多個節點之間擴展。
  • 4.容錯性,重視失敗。
  • 5.遠程透明性

    Actor模型並不是什麼新鮮事物,它由Carl Hewitt於上世紀70年代早期提出,目的是爲了解決分佈式編程中一系列的編程問題。其特色以下: git

  • 系統中的全部事物均可以扮演一個Actor
  • Actor之間徹底獨立
  • 在收到消息時Actor所採起的全部動做都是並行的,在一個方法中的動做沒有明確的順序
  • Actor由標識和當前行爲描述
  • Actor可能被分紅原始(primitive)和非原始(non primitive)類別
  • 非原始Actor有
    • 由一個郵件地址表示的標識
    • 當前行爲由一組知識(acquaintances)(實例變量或本地狀態)和定義Actor在收到消息時將採起的動做組成
  • 消息傳遞是非阻塞和異步的,其機制是郵件隊列(mail-queue)
  • 全部消息發送都是並行的



二、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對象,最後把消息寫給客戶端。 github


2、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上面很活躍。
web

下面是目前界面的兩個截圖, 本身看着都以爲很醜啊! 豬哥,答應個人設計圖呢~~ 編程



3、開源

    開源地址:  Osc@Git  http://git.oschina.net/for-1988/oschat 
json

    WebSocket感受已經比較成熟的了,支持二進制傳輸,已有基於WebSocket的商業視頻通信。文件傳輸、視頻音頻將是我下面主要作的事情。
服務器

相關文章
相關標籤/搜索