Foros del Web » Programando para Internet » Javascript » Frameworks JS »

web sockets en angular mediante angular.socket.io

Estas en el tema de web sockets en angular mediante angular.socket.io en el foro de Frameworks JS en Foros del Web. Muy buenos días, Este es mi primer post en esta comunidad. Aparte de venir a recabar información y soluciones, espero también aportar algo con l ...
  #1 (permalink)  
Antiguo 01/11/2015, 11:47
 
Fecha de Ingreso: octubre-2015
Mensajes: 1
Antigüedad: 8 años, 6 meses
Puntos: 0
web sockets en angular mediante angular.socket.io

Muy buenos días,

Este es mi primer post en esta comunidad. Aparte de venir a recabar información y soluciones, espero también aportar algo con l oque sé, que de momento no es mucho, pero en in, espero seguir mejorando.

En esta ocasion vengo con un problmas que me ha traído de cabeza bastante tiempo. Resulta que tengo una aplicación separada en dos partes: backend y frontend, donde la primera parte hace de servidor y la segunda de cliente.

En el lado del servidor, tengo instalada la librería de socket.io, para poder abrir sockets desde el servidor. Creo que teoricamente una vez activado se encuentra lvantado hasta que yo mismo le diga que pare.

El codigo del index.js, que se encontraría en el backend, seria el siguiente:

Código:
var express = require('express');
var app = express();
var server = require('http').createServer(app);
var io = require('socket.io')(server);

var errors = require('./utils/errors');
var routes = require('./routes/routes');
//var sensors = require('./events/sensors');
var Orders = require('./events/orders');
var Sensors = require('./events/sensors');
var orders = Orders();
var sensors = Sensors();

ordersIo = io.of('/');
sensorsIo = io.of('/sensors');
//TODO: Los namespaces de Sockets han de estar en este archivo los eventos no.
ordersIo.on('connection', orders.connectionOrders);
sensorsIo.on('connection', sensors.connectionSensors);

app.use(express.static('../medusa-front'));
app.use('/', routes.router);

server.listen(3030, function() {
    console.log('Servidor corriendo http://localhost:3030');
});
Como digo, el servidor queda activado y se mantiene sin problemas. Ahora, vamos al frontend.

Allí, tengo un módulo principal, desde el cual llamo al resto, llamado app.js:

Código:
(function(){
	"use strict";
	//Creamos la app de Angular que es un módulo -medusa- sin dependencias
	var app = angular.module('medusa', [
		'ngRoute',
		'medusa.directives',
		'medusa.controllers',
		'medusa.services'
	])
	.config(config);

	function config ($locationProvider, $routeProvider){
		$locationProvider.html5Mode(true);
		$routeProvider
			.when('/', {
				templateUrl: 'views/principal.html'
			})
			.when('/pruebas', {
				templateUrl: 'views/trials.html'
			})
			.when('/camaras', {
				templateUrl: 'views/cameras.html'
			})
			.otherwise({
				redirectTo: '/'
			});
	}

})();
Esta parte también funciona, la aplicacion se muestra por pantalla, en la url http://localhost:3030. Ahora tengo que decir que para intentar hacer socket desde el cliente al servidor, he utilizado otra librería, [URL="https://github.com/btford/angular-socket-io"]btford/angular-socket-io[/URL], la cual creo que de alguna forma permite lo que pretendo. Reconozco que no estoy muy seguro.

Alo que iba, instalo la librería y hago la inyeccion de su dependencia en el modulo services.js:

Código:
(function(){
    "use strict";

    angular
        .module('medusa.services', [
            'ngWebSocket',
            'btford.socket-io',])
        .factory('AtmosphericsSensors', atmosphericsSensors)
        .factory('StrongsSensors', strongsSensors)
        .factory('InclinometersSensors', inclinometersSensors)
        .factory('DistancesSensors', distancesSensors)
        .factory('FlowmetersSensors', flowmetersSensors)
        .factory('MicrowavesSensors', microwavesSensors)
        .factory('ConsumptionsSensors', consumptionsSensors)
        .factory('AnemometersSensors', anemometersSensors)
        .factory('LapCountersSensors', lapCountersSensors)
        .factory('GuidesSensors', guidesSensors);

        function atmosphericsSensors($websocket){
            var ws = $websocket('ws://localhost:3030');
            var sensors = [];

            ws.onMessage(function(event) {
                console.log('AtmosphericsSensors: ', event);
                var res;
                res = JSON.parse(event.data);
                /*
                try {
                    res = JSON.parse(event.data);
                } catch(e) {
                    res = {'username': 'anonymous', 'message': event.data};
                }
                */
                sensors.push({
                    data : res.data,
                    date : res.date
                });
            });

            ws.onError(function(event) {
              console.log('connection Error', event);
            });

            ws.onClose(function(event) {
              console.log('connection closed', event);
            });

            ws.onOpen(function() {
              console.log('connection open');
              ws.send('Hello World');
              ws.send('again');
              ws.send('and again');
            });

            return {
                measures: sensors
            };

        }

})();
Se que me qeda incluuir la conexion al servidor, pues la variable ws ahora mismo no tiene gran utilidad. Solo funciona ws.error y ws.close. En fin, que no sé muy bien como conectardel cliente al servidor.

Por último me gustaría aclarar que frontend y backend están separados, es decir, ahora mismo cuelgan de mi directorio /var/www/ de la siguiente forma:

backend
index.js
node_modules
...

frontend
index.html
node_modules
bower.json
package.json
...

Y creo que eso es todo. Los puntos suspensivos denotan otras carpetas que en principio no considero relevantes. Si necesitais saber cuales son, preguntadme.

Y no se si l he dicho ya: en el backend tengo instalada la librería socket.io,que comodigo de momento parece que va bien, y en el frontend tengo la librería angular.socket.io, que no se si estoy aplicando bien lo que me pide.

Mis disculpas por la chapa, pero quería ser lo más específico posible. Gracias,

Un saludo!

Etiquetas: angular, libreria
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:46.