安卓即時通信-websocket(PHP服務端)

之前寫了一個安卓app吊档,其中使用了即時通信,簡單的用了websocket唾糯,這里簡單說明一下

  1. websocket是什么
    http://www.ruanyifeng.com/blog/2017/05/websocket.html
    簡單理解就是能在兩個端通信的一個協(xié)議籍铁,也可以用socket涡上。
    兩邊都監(jiān)聽自己的一個端口趾断,端口收到數(shù)據(jù)就展示出來拒名,想要發(fā)送數(shù)據(jù)就發(fā)送到這個端口即可

注意,執(zhí)行流程是:服務端先啟動芋酌,然后客戶端向服務端發(fā)起連接增显,這樣就建立了1對連接,每個客戶端都向服務器發(fā)起連接脐帝,建立n對連接同云,每個客戶端都可以和服務端進行通信

  1. 兩個app如何通信
    這里需要服務器做轉(zhuǎn)發(fā)了,A->SERVER->B堵腹;B->SERVER->A炸站;就是app把信息發(fā)給服務器,服務器再轉(zhuǎn)發(fā)給另一個app疚顷,那么服務器怎么知道誰是另一個呢旱易?我們可以做一個簡單的注冊和轉(zhuǎn)發(fā)。具體如下:
    每個客戶端app都要連接websocket服務端腿堤,連接之后服務器端會保存這個客戶端的連接信息阀坏,可以從這個連接獲取信息或者發(fā)送信息給這個連接
    現(xiàn)在服務端就有了所有已連接的app信息了,但是還是不知道誰是誰笆檀,所以要求app在連接的時候通報服務端用戶id 是 什么忌堂,在服務端把用戶id和連接信息關聯(lián)起來,然后根據(jù)用戶id找到連接信息去轉(zhuǎn)發(fā)酗洒。
    在app發(fā)消息的時候士修,我們可以簡單規(guī)定一個格式,fromid:toid:msg樱衷,當然也可以規(guī)定一個更復雜的協(xié)議棋嘲,服務端收到之后拿到toid去轉(zhuǎn)發(fā)。
        // 服務端收到信息的操作
        list($fromId,$toId,$msg) = explode(":",$data);
        Log::info("receive-"."from=".$fromId."To=".$toId."msg=".$msg);
        if (!array_key_exists($fromId,$worker->uidConnections) || $worker->uidConnections[$fromId] != $connection) {
            $worker->uidConnections[$fromId] = $connection;
            Log::info("this user first comes,his email=".$fromId);
        }
      // 安卓端點擊發(fā)送的操作箫老,拼接了我們說的格式
      sendBtn.setOnClickListener(v -> {
            String content=inputText.getText().toString();
            if("".equals(content))
                return;
            if (client != null && client.isOpen()) {
                Log.i("WebSocket",content);
                client.send(myEmail+":"+toEmail+":"+content);
            }
            msgList.add(new Msg(content, Msg.TYPE.SENT));

            //如果有新消息封字,則設置適配器的長度(通知適配器,有新的數(shù)據(jù)被插入)耍鬓,并讓 RecyclerView 定位到最后一行
            int newSize = msgList.size() - 1;
            adapter.notifyItemInserted(newSize);
            msgRecyclerView.scrollToPosition(newSize);

            //清空輸入框中的內(nèi)容
            inputText.setText("");
        });
  1. 用到的框架
    安卓用的是implementation "org.java-websocket:Java-WebSocket:1.4.0"這個工具
    php用的是ThinkPHP+WorkerMan
  2. 源代碼
    近期代碼不能公開阔籽,需要交流的可以留言
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市牲蜀,隨后出現(xiàn)的幾起案子笆制,更是在濱河造成了極大的恐慌,老刑警劉巖涣达,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件在辆,死亡現(xiàn)場離奇詭異证薇,居然都是意外死亡,警方通過查閱死者的電腦和手機匆篓,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進店門浑度,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人鸦概,你說我怎么就攤上這事箩张。” “怎么了窗市?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵先慷,是天一觀的道長。 經(jīng)常有香客問我咨察,道長论熙,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任摄狱,我火速辦了婚禮脓诡,結果婚禮上,老公的妹妹穿的比我還像新娘二蓝。我一直安慰自己誉券,他們只是感情好,可當我...
    茶點故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布刊愚。 她就那樣靜靜地躺著踊跟,像睡著了一般。 火紅的嫁衣襯著肌膚如雪鸥诽。 梳的紋絲不亂的頭發(fā)上商玫,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天,我揣著相機與錄音牡借,去河邊找鬼拳昌。 笑死,一個胖子當著我的面吹牛钠龙,可吹牛的內(nèi)容都是我干的炬藤。 我是一名探鬼主播,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼碴里,長吁一口氣:“原來是場噩夢啊……” “哼沈矿!你這毒婦竟也來了?” 一聲冷哼從身側響起咬腋,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤羹膳,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后根竿,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體陵像,經(jīng)...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡就珠,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了醒颖。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片妻怎。...
    茶點故事閱讀 40,096評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖图贸,靈堂內(nèi)的尸體忽然破棺而出蹂季,到底是詐尸還是另有隱情,我是刑警寧澤疏日,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站撒汉,受9級特大地震影響沟优,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜睬辐,卻給世界環(huán)境...
    茶點故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一挠阁、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧溯饵,春花似錦侵俗、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至啄巧,卻和暖如春寻歧,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背秩仆。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工码泛, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人澄耍。 一個月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓噪珊,卻偏偏與公主長得像,于是被迫代替她去往敵國和親齐莲。 傳聞我的和親對象是個殘疾皇子痢站,可洞房花燭夜當晚...
    茶點故事閱讀 45,037評論 2 355