• 第十三章:基于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/
  • 相关阅读:
    借阅的列表
    列表中的方法
    对编程本质的认识
    列表技能
    链表策略
    在pycharm里添加解释器路径
    数据类型转化
    罗列内存中的数字
    【python3的学习之路十】模块
    【python3的学习之路九】函数式编程
  • 原文地址:https://www.cnblogs.com/allanli/p/ionic_chat_with_socket_io.html
Copyright © 2020-2023  润新知