Socket.IO aims to make realtime apps possible in every browser and mobile device, blurring the differences between the different transport mechanisms. It's care-free realtime 100% in JavaScript.
var io = require('socket.io').listen(80);io.sockets.on('connection', function(socket) {socket.emit('news', {hello: 'world' });socket.on('my other event', function(data) {console.log(data);});});
<script src="/socket.io/socket.io.js"></script><script>var socket = io.connect('http://localhost');socket.on('news', function(data) {console.log(data);socket.emit('my other event', {my: 'data'});});</script>
Server
Client
var mySocket = io.connect('http://localhost/');mySocket.disconnect();mySocket.on('userJoined', function(data) {console.log('A user joined!', data);});
mySocket.emit('updateUserName', {name: 'My New Name' });angular.module('wsDemo').service('SocketService', function($rootScope) {var socket; // Our future socketvar self = this;this.connect = function connect() {socket = io.connect('http://localhost/');listenForEvents(socket); // Coming in a bit};this.disconnect = function disconnect() {if(socket) {socket.disconnect();}};
function listenForEvents(ws) {ws.on('userJoined', function(data) {$rootScope.$apply(function() {// Let's broadcast an Angular event$rootScope.$broadcast('userJoined', data);});});ws.on('userLeft', function(data) {$rootScope.$apply(function() {$rootScope.$broadcast('userLeft', data);});});}
ws.on('userLeft', function(data) {$rootScope.$apply(function() {$rootScope.$broadcast('userLeft', data);}););
// Send the given messagethis.sendMessage = function(message) {if (socket) {socket.emit('message', message);}}
function ($scope, ChatService, SocketService) {
$scope.messages = ChatService.messages;
function sendMessage(message) {
ChatService.sendMessage(message);
// Clear the message
$scope.msgToSend = '';
};
$scope.sendMessage = sendMessage;
$scope.messageKeyUp = function messageKeyUp($event, message) {
if ($event.keyCode === 13 && $scope.userForm.$valid) {
sendMessage(message);
}
};
});
.service('ChatService', function chatService($rootScope, SocketService, UsersService) {this.messages = [];var self = this;function messageReceived(event, data) { // Filter out our own messages if(UsersService.myUser.id !== data.id) { self.messages.push(data); } }function sendMessage(message) {self.messages.push(message);SocketService.sendMessage(message);}$rootScope.$on('message', messageReceived);return this;}
.controller('UsersCtrl', function ($scope, UsersService) { $scope.users = [];// Watch for a change in the users $scope.$watch(function() { return UsersService.users; }, function(val) { $scope.users = val; }, true); });
.service('UsersService', function chatService($rootScope) { // Array to hold our users this.users = []; this.myUser = {};function userJoined(event, data) { ... }function userLeft(event, data) { ... }function userEdited(event, data) { ... }function userList(event, data) { ... }function setUserId(event, data) { ... }function disconnected(event, data) { ... }$rootScope.$on('userJoined', userJoined);...$rootScope.$on('disconnected', disconnected);return this;