亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Android使用WebSocket實現(xiàn)多人游戲

 更新時間:2017年11月01日 10:46:57   作者:在尋找雪見的景天  
WebSocket 是 HTML5 一種新的協(xié)議。實現(xiàn)了瀏覽器與服務(wù)器全雙工通信,下面通過本文給大家分享Android使用WebSocket實現(xiàn)多人游戲,需要的朋友參考下吧

WebSocket 是 HTML5 一種新的協(xié)議。它實現(xiàn)了瀏覽器與服務(wù)器全雙工通信,能更好的節(jié)省服務(wù)器資源和帶寬并達(dá)到實時通訊,它建立在 TCP 之上,同 HTTP 一樣通過 TCP 來傳輸數(shù)據(jù),但是它和 HTTP 最大不同是:

WebSocket 是一種雙向通信協(xié)議,在建立連接后,WebSocket 服務(wù)器和 Browser/Client Agent 都能主動的向?qū)Ψ桨l(fā)送或接收數(shù)據(jù),就像 Socket 一樣;

WebSocket 需要類似 TCP 的客戶端和服務(wù)器端通過握手連接,連接成功后才能相互通信。

如果想深入了解websocket機(jī)制和原理:http://www.ibm.com/developerworks/cn/java/j-lo-WebSocket/

前言

前段時間,項目中用到了webSocket,特此來記錄一下接入方法。

webSocket使用場景:社交聊天、彈幕、多玩家游戲、協(xié)同編輯、體育實況更新、基于位置的應(yīng)用、在線教育、智能家居等需要高實時的場景。(結(jié)合到我們公司的業(yè)務(wù),每到大型節(jié)日的時候,比如春節(jié)啊,可以搞個彈幕祭拜啥的)

webSocket流程

1、客戶端開始連接------->服務(wù)端收到連接(保存客戶端ip)--------->服務(wù)端向客戶端發(fā)送連接成功消息

2、客戶端發(fā)送消息(內(nèi)容和服務(wù)端定義好,一般是json格式)----------服務(wù)端收到消息,根據(jù)想要的邏輯,決定是否推送給所有連接上的客戶端

3、客戶端收到推送消息,更新UI界面

Android接入

Android接入的話,直接用庫吧,簡單方便,我接入的是這個庫:

compile 'com.koushikdutta.async:androidasync:2.+'

他的調(diào)用也很方便

AsyncHttpClient.getDefaultInstance().websocket("ws://test.ling.com:9588/", "9588", new AsyncHttpClient.WebSocketConnectCallback() {
      @Override
      public void onCompleted(Exception e, WebSocket webSocket) {
        if (e != null) {
          e.printStackTrace();
          return;
        }
        //接收到消息的監(jiān)聽
        webSocket.setStringCallback(new WebSocket.StringCallback() {
          @Override
          public void onStringAvailable(String s) {
            runOnUiThread(new Runnable() {
              @Override
              public void run() {
                //更新ui界面
              }
            });
          }
        });
        //關(guān)閉鏈接的監(jiān)聽
        webSocket.setClosedCallback(new CompletedCallback() {
          @Override
          public void onCompleted(Exception e) {
          }
        });
        //發(fā)送內(nèi)容到服務(wù)端
        webSocket.send("測試測試");
      }
    });

是吧,很簡單,就幾個方法。下面開始說說,如何用websocket來搞多人游戲的思路,不過,我還沒去試過啊,只是理論上的一種思路,應(yīng)該可行,哈哈。

websocket開發(fā)多人游戲

簡單點,我們搞一個像王者農(nóng)藥一樣的,就是10個人在畫面上,左5個,右5個,這就意味著有10個客戶端啦,當(dāng)客戶端點擊移動按鈕,對應(yīng)的人物在畫面上就相應(yīng)移動一點,當(dāng)然,是10個客戶端同時變化,你移動了,其他人也會看到你移動。那些打斗啊什么鬼的,我們先不管,我們先做好移動,其他的思路應(yīng)該差不多。開始:

1、客戶端開始連接服務(wù)端:發(fā)送姓名,服務(wù)端記錄好這些信息。

 webSocket.send("{"code":1,"name":"A用戶"}");
 webSocket.send("{"code":1,"name":"B用戶"}");
 ·······
 webSocket.send("{"code":1,"name":"J用戶"}");

2、服務(wù)端邏輯處理,當(dāng)有10個人鏈接成功后,證明比賽要開始了,初始化10個玩家的位置,推送消息給所有玩家:

服務(wù)端推送的消息

正常來說,客戶端在這個方法接收到上面的推送消息:

 //接收到消息的監(jiān)聽
        webSocket.setStringCallback(new WebSocket.StringCallback() {
          @Override
          public void onStringAvailable(String s) {
            runOnUiThread(new Runnable() {
              @Override
              public void run() {
                //更新ui界面,把10個玩家的信息和位置顯示在界面上
              }
            });
          }
        });

3、吶,現(xiàn)在10個玩家的位置都初始化了。然后,玩家開始移動,比如說A用戶移動到100.100的位置,那客戶端就發(fā)送:

webSocket.send("{"code":0,"name":"A用戶","x":100,"y":100}");

4、服務(wù)端收到客戶端發(fā)送的命令后,就根據(jù)內(nèi)容更新列表啦,這時,A用戶的位置就是改為100.100了。然后推送新的游戲信息給所有的客戶端,客戶端收到命令后,同樣是更新界面,這時A用戶的位置就改變啦。

更新界面信息

這樣就大概完成整個流程啦。當(dāng)然,這只是位置更改的邏輯,如果要搞出技能啊,攻擊啊,血條啊啥的,就要加一堆判斷啦,但思路是不變的,都是客戶端先發(fā)要更新的資料到服務(wù)端,然后服務(wù)端整理群發(fā)新的比賽信息到客戶端,客戶端收到后更新界面就ok。

附加問題

上面的是服務(wù)端群發(fā)到客戶端,如果是要單發(fā)到指定的客戶端,咋辦呢?不用慌,客戶端和服務(wù)端鏈接的時候,會有一個唯一的ip,然后保存下來,和用戶名綁定在一起,到時就可以單推啦。

總結(jié)

以上所述是小編給大家介紹的Android使用WebSocket實現(xiàn)多人游戲,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

  • android商品詳情頁面設(shè)計詳解

    android商品詳情頁面設(shè)計詳解

    這篇文章主要為大家詳細(xì)介紹了android商品詳情頁面設(shè)計,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • Android中Socket大文件斷點上傳示例

    Android中Socket大文件斷點上傳示例

    本篇文章主要介紹了Android中Socket大文件斷點上傳示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-02-02
  • Android studio實現(xiàn)PopupWindow彈出框效果

    Android studio實現(xiàn)PopupWindow彈出框效果

    這篇文章主要為大家詳細(xì)介紹了Android studio實現(xiàn)PopupWindow彈出框效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • android圖片壓縮的3種方法實例

    android圖片壓縮的3種方法實例

    這篇文章介紹了android圖片壓縮的3種方法實例,有需要的朋友可以參考一下
    2013-09-09
  • Android?Material組件庫日期選擇和時間選擇器的使用方法

    Android?Material組件庫日期選擇和時間選擇器的使用方法

    這篇文章主要介紹了Android?Material組件庫(日期選擇和時間選擇器)基本使用,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2023-11-11
  • android自定義view之實現(xiàn)日歷界面實例

    android自定義view之實現(xiàn)日歷界面實例

    本篇文章主要介紹了android自定義view之實現(xiàn)日歷界面實例,具有一定的參考價值,感興趣的小伙伴們可以參考一下。
    2017-03-03
  • Android編程之控件狀態(tài)配置文件實例

    Android編程之控件狀態(tài)配置文件實例

    這篇文章主要介紹了Android編程之控件狀態(tài)配置文件,以實例形式分析了Android控件狀態(tài)配置文件對于選中、獲得焦點、按下時的狀態(tài)等相關(guān)設(shè)置技巧,需要的朋友可以參考下
    2016-01-01
  • Android?Flutter繪制扇形圖詳解

    Android?Flutter繪制扇形圖詳解

    在開發(fā)過程中通常會遇到一些不規(guī)則的UI,比如不規(guī)則的線條,多邊形,統(tǒng)計圖表等等,用那些通用組件通過組合的方式無法進(jìn)行實現(xiàn),這就需要我們自己進(jìn)行繪制。本文將利用Flutter繪制扇形圖,感興趣的可以學(xué)習(xí)一下
    2022-05-05
  • Android超詳細(xì)講解組件AdapterView的使用

    Android超詳細(xì)講解組件AdapterView的使用

    AdapterView組件是一組重要的組件,AdapterView本身是一個抽象基類,它派生的子類在用法上十分相似,從AdapterView派生出的三個子類:AdsListView、AdsSpinner、AdapterViewAnimator,這3個子類依然是抽象的,實際運用時需要它們的子類
    2022-03-03
  • Android 使用Vitamio打造自己的萬能播放器(3)——本地播放(主界面、播放列表)

    Android 使用Vitamio打造自己的萬能播放器(3)——本地播放(主界面、播放列表)

    本文主要介紹 Android Vitamio本地播放功能,這里提供實例代碼和效果圖以便大家參考,有需要的小伙伴可以參考下
    2016-07-07

最新評論