• 第十三章:基于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=" 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/
  • 相关阅读:
    Java多线程
    http网页请求状态码
    C++文件读写
    算法训练 最大的算式
    算法训练 2的次幂表示
    线段树- 算法训练 操作格子
    Prim算法(最小生成树)
    Kruskal算法(最小生成树)
    Dijkstra算法(最短路)
    HDU5692 dfs + 线段树维护区间最大值
  • 原文地址:https://www.cnblogs.com/allanli/p/ionic_chat_with_socket_io.html
Copyright © 2020-2023  润新知