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 socket
var 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 message
this.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;