Guilherme Lopes – Autenticação – Node.js Integration API



Guilherme Lopes – Autenticação – Node.js Integration API

0 0


drupal_and_nodejs

Apresentação para Drupal Day POA 2014, Aplicações Real Time com Drupal e Node.js

On Github guiajlopes / drupal_and_nodejs

Guilherme Lopes

Desenvolvedor Drupal

  • Github: guiajlopes
  • Drupal.org: guilopes
  • Email: guilherme@mmda.com.br
Bom dia pessoal, meu nome é Guilherme Lopes. Sou desenvolvedor Drupal há 3 anos mais focado em desenvolvimento Back-end. Atualmente estou trabalhando na MMDA. Coloquei alguns lugares aonde vocês podem me encontrar. Guiajlopes no github, no drupal.org guilopes. Qualquer sugestão dúvidas e feedbacks vocês podem enviar para guilherme@mmda.com.br

Aplicações Real Time com Drupal e Node.js

Hoje vou falar sobre aplicações real time com Drupal e Nodejs

O que é Node.js?

Quem sabe o que é nodejs? E quem já trabalhou com nodejs?

Node.js

  • Javascript Server Side
  • Baseado na engine V8 do Google
  • Orientado a Eventos
  • Assíncrono
  • Sistema modular
- V8 é um engine da google, usada no google Crhoem apra interpretar o javascript do navegador. V8 é construido em C++.

Node.js

Exemplo de um servidor Nodejs

						
						var http = require('http');
						http.createServer(function(req,res) {
						  var head = { 'Content-Type': 'text/plain; charset=utf-8' };
						  res.writeHead(200, head);
						  res.end('Olá mundo!');
						}).listen(3000);
						console.log('Servidor iniciado em localhost:3000.');
						
					

Node.js - Gerenciador de pacotes

O Gerenciador de pacotes do nodejs é o NPM.

Já existem muitos modulos de node nesse repositorios. Módulos de rotas como o express, modulos de testes funcionais, unitários e assim por diante.

Em que casos usar Node.js?

  • Automatização de Tarefas
  • Restfull API
  • Aplicações Real Time

Cases de Node.js

Grandes empresas como Linkedin, Wallmart, Grupon, Microsoft e Paypal usam Node.js

WebSocket

É uma tecnologia que permite comunicação bidirecional de baixa latência

Módulo Socket.IO

  • Utilizado para interação Real Time
  • Utiliza Websocket
  • Crossbrowser (IE6+)

Principais funções do Socket.IO :

						
							// Evento quando o usuário se conecta.
							io.on('connection', function(client) {

							});

							// Servidor enviando mensagem para client.
							client.emit("seu-evento", data);

							// Envia mensagem para os demais clientes.
							client.broadcast.emit("seu-evento", data)
						
					

Principais funções do Socket.IO :

						
							// Evento disparado quando usuário desconecta.
							client.on("disconnect", function() {

							});

							// Evento que o servidor escuta uma ação do cliente.
							client.on("um-evento", function(data) {

							});
						
					

Drupal e Node.js

Nodejs Integration : https://www.drupal.org/project/nodejs

Views Nodejs : https://www.drupal.org/project/views_nodejs

Sobre o módulo Node.js Integration

  • Utiliza socket.io
  • User channels
  • Content channels
  • PHP API
  • Possibilita extender o server

Autenticação

Primeira Autenticação

Autenticação

Demais Autenticações

Node.js Integration API

Criando um user channel

							
									/**
									 * Implements hook_nodejs_user_channels().
									 */
									function hook_nodejs_user_channels($account) {
									  if ($account->uid > 0) {
									    return array('nodejs_user_' . $account->uid);
									  }
									}
							
						

Node.js Integration API

Enviando uma mensagem

							
							  // Build message object.
							  $message = new stdClass();
							  $message->channel = 'meu_channel';
							  $message->callback = 'meu_callback'
							  $message->data = (object) array(
							    'body' => 'Sua mensagem',
							  );

							  nodejs_enqueue_message($message);
							
						

Node.js Integration API

Callback da mensagem no Javascript.

							
								(function ($) {
								  /**
								   * Drupal.Nodejs.callback
								   */
								  Drupal.Nodejs.callbacks.meu_callback = {
								    callback: function (message) {
								      if (message.channel == 'meu_channel') {
								        // Realiza uma ação.
								      }
								    }
								  };
								}(jQuery));
							
						

Na Prática...

Perguntas?