安装好环境,请参考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/

第十三章:基于socket.io实现即时通信的更多相关文章

  1. C语言 linux环境基于socket的简易即时通信程序

    转载请注明出处:http://www.cnblogs.com/kevince/p/3891033.html      ——By Kevince 最近在看linux网络编程相关,现学现卖,就写了一个简易 ...

  2. 基于 socket.io 的 AI 服务 杂谈

    为什么会想到来聊下这个话题. 前几天在公司的项目中,开发一个基于 socket.io 的直播 IM 功能. 直播分为两部分,一部分是比较昂贵的 视频推流, 另外一部分是 IM 即时聊天服务. 从这里开 ...

  3. 在线白板,基于socket.io的多人在线协作工具

    首发:个人博客,更新&纠错&回复 是昨天这篇博文留的尾巴,socket.io库的使用练习,成品地址在这里. 代码已经上传到github,传送门.可以开俩浏览器看效果. 现实意义是俩人在 ...

  4. 基于socket.io的实时在线选座系统

    基于socket.io的实时在线选座系统(demo) 前言 前段时间公司做一个关于剧院的项目,遇到了这样一种情况. 在高并发多用户同时选座的情况下,假设A用户进入选座页面,正在选择座位,此时还没有提交 ...

  5. Python基于socket模块实现UDP通信功能示例

    Python基于socket模块实现UDP通信功能示例 本文实例讲述了Python基于socket模块实现UDP通信功能.分享给大家供大家参考,具体如下: 一 代码 1.接收端     import ...

  6. 基于 socket.io, 简单实现多平台类似你猜我画 socket 数据传输

    一.前言 socket.io 实现了实时双向的基于事件的通讯机制,是基于 webSocket 的封装,但它不仅仅包括 webSocket,还对轮询(Polling)机制以及其它的实时通信方式封装成了通 ...

  7. 基于socket.io打造hybrid调试页面

    前言 参考的钉钉调试页面实现,仅供学习! 功能为: PC端编写代码,手机端执行 解决的痛点是: 避免了调试hybrid应用时重复写各种测试页面 源码与示例 源码 https://github.com/ ...

  8. 基于socket.io的实时消息推送

    用户访问Web站点的过程是基于HTTP协议的,而HTTP协议的工作模式是:请求-响应,客户端发出访问请求,服务器端以资源数据响应请求. 也就是说,服务器端始终是被动的,即使服务器端的资源数据发生变化, ...

  9. Node学习笔记(三):基于socket.io web版你画我猜(二)

    上一篇基础实现的功能是客户端canvas作图,导出dataURL从而实现图片信息推送,下面具体讲下服务端的配置及客户端的配置同步 首先先画一个流程图,讲下大概思路 <canvas id=&quo ...

随机推荐

  1. 利用Response.Buffer做类似异步效果

    在page_load加入以下代码 Response.Buffer = false;  //这句话非常重要 for (int i = 0; i < 10; i++) { Thread.Sleep( ...

  2. LOJ#10172. 「一本通 5.4 练习 1」涂抹果酱

    题目链接:https://loj.ac/problem/10172 题目描述 Tyvj 两周年庆典要到了,Sam 想为 Tyvj 做一个大蛋糕.蛋糕俯视图是一个 N×MN×MN×M 的矩形,它被划分成 ...

  3. WPF中XAML的触发器的属性,事件 都有那些?以及如何寻找

    在编写XAML的触发器时,会有属性,事件. 那么这些都是哪里来的呢? 属性,是附加属性或者依赖属性 事件,那就是事件. 如何寻找呢? 很简单,在想要使用的触发器的对象上(也就是有光标的时候)按下F12 ...

  4. 查看服务器的ip地址

    因测试需要查看服务器的ip地址,故进行搜索. 1.(操作成功的方法)在浏览器输入www.ip.cn,可查询出ip地址: 2.(说明书的操作方法,但我未能查询到ip地址)在浏览器输入http://ip. ...

  5. Jmeter_Beanshell_使用Java处理JSON块

    版权声明:本文为博主原创文章,转载请注明出处. [环境] ①Jmeter版本:3.2,JDK:1.8 ②前置条件:将json.jar包置于..\apache-jmeter-3.2\lib\下,并将该j ...

  6. 【AGC010F】Tree Game 博弈论+暴力

    Description ​ 有一棵nn个节点的树,第ii条边连接ai,biai,bi,每个节点ii上有AiAi个石子,高桥君和青木君将在树上玩游戏 ​ 首先,高桥君会选一个节点并在上面放一个棋子,然后 ...

  7. Java create azure web app

    create a certificate <java-install-dir>/bin/ keytool -genkey -alias <keystore-id> -keyst ...

  8. HTML5+CSS实现三列布局自适应

    利用CSS的float属性可以将元素并排,做出三列并排的布局. 如这样的效果 实现的原理:只要将3个元素设置float属性,属性值为left,同时指定不同比例的宽度,及高度. 下面是实现代码 < ...

  9. TX2 dts、dtb编译与反编译

    设备树(Device Tree)包括DTC(device tree compiler),DTS(device tree source和DTB(device tree blob). dtc编译器能够把 ...

  10. springcloud微服务总结五 服务熔断

    一:雪崩效应 如下图所示:A作为服务提供者,B为A的服务消费者,C和D是B的服务消费者.A不可用引起了B的不可用,并将不可用像滚雪球一样放大到C和D时,导致整个系统瘫痪,雪崩效应就形成了. 雪崩过程: ...