目前,web应用普遍被要求是实时web应用,即服务端的数据更新之后,应用能立即更新。以前使用的技术(例如polling)存在一些局限性,而且有时我们需要在客户端打开一个socket,然后进行通信。
Socket.IO(http://socket.io/)是一个非常优秀的库,它可以帮你实现以上功能。它使用了非常简单的、基于事件的API,让你可以开发实时web应用。我们打算开发一个实时的匿名广播系统(类似于Twitter,只是我们的系统没有用户名),它可以向Socket.IO上的所有用户发送消息,并且自已也可以看到所有消息。系统不会存储任何东西,所以只有当用户处于活动状态时消息才是存活的,但是这个例子足以说明Socket.IO可以和AngularJS完美地集成到一起。
稍后,我们将会把Socket.IO包装到一个很好的AngularJS服务中去,这样我们可以保证:
1.Socket.IO的事件将会在AngularJS生命周期内部进行通知并处理。
2.以后的集成测试会更加容易
app.js
var app = angular.module('myApp', []); //我们把socket服务定义成了一个factory,这样它只会被实例化一次,而且在整个应用的作用域范围内就成为了一个单例 app.factory('socket', function($rootScope) { var socket = io.connection('http://localhost:8899'); 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); } }); }) } }; }); app.controller('MainCtrl', function($scope, socket) { $scope.message = ''; $scope.messages = []; //当我们看到一条从服务端发送过来的新消息时 socket.on('new:msg',function(message) { $scope.message.push(message); }); //告诉服务端有一条新消息 $scope.boradcast = function() { socket.emit('broadcast:msg', {message:$scope.message}); $scope.message.push($scope.message); $scope.message = ''; }; });
我们只包装了我们所关心的两个函数,它们是Socket.IO API里面on event和broadcast event方法。除此之外还有很多方法,都可以使用类似的方式进行包装。
控制器MainCtrl本身非常简单,它会监听socket连接上的一些事件,并且会监听用户是否按下了broadcast按钮,一旦按下就告诉服务器出现了一条新信息。它同时还会把消息添加到列表中,并立即显示给用户。
我们将会使用一个很简单的index.html,其中会显示一个带有发送按钮的文本框以及一个消息列表。在这个例子中,我们不会跟踪谁发送了消息,或者他们何时发送了消息。
index.html
<!DOCTYPE html> <html ng-app="myApp"> <head lang="en"> <meta charset="utf-8"></meta> <title>Anonymous Broadcaster</title> <script src="node_modules/socket.io/index.js"></script> <script src="angular/angular.js"></script> <script src="app.js"></script> </head> <body ng-controller="MainCtrl"> <input type="text" ng-model="message"></input> <button ng-click="broadcast()">Broadcast</button> <ul> <li ng-repeat="msg in message">{{msg}}</li> </ul> </body> </html>
最后就只剩下服务端了。这是一个NodeJS服务器,它知道如何为应用代码提供服务,并且还创建了一个模拟的Socket.IO服务器。
var app = require('express')(), server = require('http').createServer(app), io = require('socket.io').listen(server); server.listen(8899); app.get('/',function(req,res) { res.send/File(__dirname + '/index.html'); }); app.get('/app.js', function(req, res) { res.sendFile(__dirname + '/app.js'); }); io.sockets.on('connection', function(socket) { socket.emit('new:msg', 'Welcome to AnonBoard'); socket.on('broadcast:msg', function(data) { //把新的消息通知给所有其他客户端(除自已外) socket.broadcast.emit('new:msg', data.message); }); });
你可以很轻松地扩展它,用来处理更多信息和更加复杂的结构。这个例子打下了一个很好的基础,你可以利用它在你的客户端和服务端之间实现socket通信。
这个应用非常简单,它没有做任何校验操作(例如消息是否为空),但是它带有AngularJS默认提供的HTML清理功能。它不会处理复杂的消息,但是它提供了一个可运行端到端Socket.IO实现,并且集成到了AngularJS中,你可以基于此来构建自已的应用。
相关推荐
angular-socket-io-im, 使用 AngularJS + socket.io的简单即时消息应用 Angular socket.io-即时通讯演示一个简单的即时消息应用来演示 AngularJS的socket.io 种子。 :写这个应用程序的演练在我的博客上是有用的。...
用nodejs作为后台,用angularjs作为前端,用socket.io实现一个简单的聊天程序!用node server.js 即可启动服务器,在浏览器中访问127.0.0.1:3000即可进入聊天室 地址和端口都是在server.js文件中配置!需要有nodejs...
`socket.io.js`通常包含客户端的Socket.IO连接代码,而服务器端则在Express中通过`require('socket.io')`引入并配置。 **AngularJS 1.3**: AngularJS是Google维护的一个前端MVC框架,它极大地简化了单页应用(SPA)...
使用AngularJS和Socket.io的实时协作板。 如何使用angularjs-collab-board 克隆angularjs-collab-board存储库,运行npm install来获取依赖项,然后开始黑客攻击! 运行应用 像典型的快递应用程序一样运行: node ...
**AngularJS与Socket.IO结合使用教程** 在现代Web开发中,实时通信已经成为不可或缺的一部分,而AngularJS和Socket.IO的组合正是实现这一目标的强大工具。这个教程将深入探讨如何利用这两个库来创建一个实时的、...
在本文中,我们将深入探讨如何使用Socket.IO、AngularJS和Material Design来构建一个实时聊天应用。MongoDB将作为我们的后端数据库,存储聊天记录。这是一个现代Web开发中的常见技术组合,能够提供高度交互性和优雅...
这款游戏的开发主要依赖于两个核心技术:AngularJS 和 Socket.io,这两者都是 JavaScript 生态系统中的重要组成部分。 AngularJS,由 Google 主导开发,是一款强大的前端 JavaScript 框架,用于构建单页应用程序...
io.on('connection', function(socket) { socket.on('sendMessage', function(message) { socket.broadcast.emit('newMessage', message); }); }); ``` 这里,服务器监听`sendMessage`事件,并通过`broadcast`将...
使用 AngularJS 和 Socket.io 构建的工作聊天室示例。 我修复了 Ref.1 中的数据绑定问题,它将 Ref.4 中的服务器和客户端分开。 参考: 主要的一个: : 帮助理解和调试: : 同样非常有用的例子: : 一个...
【标题】"hr-portal:基于 NodeJS + AngularJS + Socket.io 的门户网站"是一个综合性的IT项目,旨在构建一个人力资源管理的在线平台。这个项目利用了三种核心技术:Node.js作为后端开发框架,AngularJS作为前端MVC...
除了简单的例子,还有一些特别好的使用 AngularJS + Socket.io 的用例。 数组操作 我删除了这些函数,因为 Lo-Dash 已经提供了并且可以使用原生 JS 和 Lo-Dash 完成附加和前置。 下面是使用 Array.unshift 和 push...
该存储库旨在展示 Socket.io 的工作原理以及如何使用 Socket.io-client 测试功能。 对应的PowerPoint演示文稿: : 使用的技术栈: Node.js / Express.js AngularJS Socket.io 吞咽 测试: 应该 Socket.io-...
AngularJS的Socket.io提供程序 安装 bower install mangolar-socket-io 如何使用 angular . module ( "myApp" , [ 'mangolar-socket.io' ] ) . config ( function ( $mangolarSocketIoProvider ) { $...
"Chatty: 聊天示例"是一个项目,它结合了Ionic框架、AngularJS、Socket.IO和NodeJS,创建了一个实时的、交互式的聊天应用。这个项目为开发者提供了一个学习和实践这些技术如何协同工作的实例,特别是对于构建移动和...
总的来说,quilting项目展示了如何将Node.js、MongoDB、AngularJS和Socket.IO结合在一起,构建一个实时、协作的Web应用程序。这个应用为被子设计者提供了一个创新的在线平台,不仅能够激发创造力,还能促进社区的...
"angular-socketio:AngularJS应用已连接到socket.io服务器" 这个标题表明我们讨论的是一个使用AngularJS框架构建的应用程序,它已经与基于socket.io的服务器实现了实时通信。AngularJS是Google维护的一个前端...
总结,这个实例展示了如何在Angular应用中使用Socket.io进行实时通信,包括服务端的Socket.io配置、客户端的Socket.io连接以及Angular组件和服务的交互。通过这种方式,可以创建出具有实时反馈功能的应用,例如实时...
ExpressJS,Socket.IO和AngularJS Boilerplate不要在通过配置应用程序和文件夹结构来开始新项目时浪费宝贵的时间-使用ExpressJS,Socket.IO和AngularJS Boilerplate并开始工作ExpressJS,Socket.IO和AngularJS ...
在本文中,我们将深入探讨如何使用Angular和Node.js、socket.io技术栈来创建一个聊天室应用,特别是多人聊天室的功能。首先,我们需要了解基础架构的组成部分。 1. **利用Node.js搭建静态服务器**: Node.js是基于...
实时记录器使用 node.js、socket.io 和 angular 构建的 websocket 上的语言不可知应用程序记录器安装git clone ...例子##PHP 将 ElephantIO