国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android使用WebSocket實現多人游戲

2019-10-22 18:24:25
字體:
來源:轉載
供稿:網友

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

WebSocket 是一種雙向通信協議,在建立連接后,WebSocket 服務器和 Browser/Client Agent 都能主動的向對方發送或接收數據,就像 Socket 一樣;

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

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

前言

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

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

webSocket流程

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

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

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

Android接入

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

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

他的調用也很方便

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;        }        //接收到消息的監聽        webSocket.setStringCallback(new WebSocket.StringCallback() {          @Override          public void onStringAvailable(String s) {            runOnUiThread(new Runnable() {              @Override              public void run() {                //更新ui界面              }            });          }        });        //關閉鏈接的監聽        webSocket.setClosedCallback(new CompletedCallback() {          @Override          public void onCompleted(Exception e) {          }        });        //發送內容到服務端        webSocket.send("測試測試");      }    });

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

websocket開發多人游戲

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

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

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

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

android,websocket,多人游戲

服務端推送的消息

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

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

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

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

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

android,websocket,多人游戲

更新界面信息

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

附加問題

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

總結

以上所述是小編給大家介紹的Android使用WebSocket實現多人游戲,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對VEVB武林網網站的支持!


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 吉隆县| 沙田区| 财经| 望谟县| 林州市| 白银市| 甘孜| 门头沟区| 延吉市| 泰顺县| 鄄城县| 平凉市| 周至县| 绥滨县| 西吉县| 佳木斯市| 江油市| 崇州市| 安溪县| 兴隆县| 静海县| 靖边县| 黑龙江省| 东源县| 文安县| 高青县| 开封市| 哈尔滨市| 马公市| 台山市| 阿瓦提县| 壤塘县| 杨浦区| 洪湖市| 威远县| 甘洛县| 夏邑县| 崇阳县| 绥化市| 铁岭县| 海兴县|