第十三章:基於socket.io實現即時通信


安裝好環境,請參考ionic環境搭建之windows篇 和 ionic環境搭建之OS X篇 。

服務器端的搭建參考socket io官網,里面有非常詳細的描述,按照步驟下來,最終可以在localhost進行模擬聊天。

下面是手機端的說明。

  • 引入socket.io.js:
<script src="js/socket.io.js"></script>
  • 定義Chats tab:
  <!-- Chats Tab -->
  <ion-tab title="Chats" icon-off="ion-ios-chatboxes-outline" icon-on="ion-ios-chatboxes" href="#/tab/chats">
    <ion-nav-view name="tab-chats"></ion-nav-view>
  </ion-tab>
  •  定義tab-chat.html:
<ion-view view-title="Chats">
<ion-content overflow-scroll="true" style="overflow: hidden">

<ion-scroll zooming="true" direction="y" style=" height:500px;" >
    <ion-list>
      <uib-alert ng-repeat="msgInfo in messages" type="{{msgInfo.type}}" close="closeAlert($index)">{{msgInfo.msgType}}: {{msgInfo.msg}}</uib-alert>
    </ion-list>
</ion-scroll>
    
    <div class="bar bar-footer">
       <label class="item item-input" style=" width:85%">
          <input type="text" placeholder="please add your message here" ng-model="msg"></input> 
      </label>
      <button class="button button-positive" ng-click="send(msg)">Send</button>
 
    </div>
  </ion-content>
  </ion-view>
  •  在app.js中定義chats的state:
  .state('tab.chats', {
      url: '/chats',
      views: {
        'tab-chats': {
          templateUrl: 'templates/tab-chats.html',
          controller: 'ChatsCtrl'
        }
      }
    })
  •  定義ChatsCtrl:
.controller('ChatsCtrl', function ($scope,mediaPlayer, chats) {
    $scope.messages = [];

    chats.on('chat message', function (msg) {
        var msgInfo = { msg: msg, type: 'warning',msgType:"Receiver" }
        $scope.messages.push(msgInfo);
        console.log('receive msg from others: ' + msg);
    });

    $scope.send = function (msg) {
        var msgInfo = { msg: msg, type: 'success', msgType: "Sender" }
        $scope.messages.push(msgInfo);
        console.log('start to send msg: ' + msg);
        chats.emit('chat message', msg);
    };

    $scope.closeAlert = function (index) {
        $scope.messages.splice(index, 1);
    };
})
  •  實現factory:
var baseUrl = 'http://localhost:3000/';

.factory('chats', function socket($rootScope) {
  var socket = io.connect(baseUrl);
  return {
    on: function (eventName, callback) {
      socket.on(eventName, function () {  
        var args = arguments;
        $rootScope.$apply(function () {
          callback.apply(socket, args);
        });
      });
    },
    emit: function (eventName, data, callback) {
      socket.emit(eventName, data, function () {
        var args = arguments;
        $rootScope.$apply(function () {
          if (callback) {
            callback.apply(socket, args);
          }
        });
      })
    }
  };
})

 

參考資料:

https://github.com/jbavari/ionic-socket.io-redis-chat
http://jbavari.github.io/blog/2014/06/17/building-a-chat-client-with-ionic/
http://socket.io/get-started/chat/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM