¿Nodejs y webSockets, desencadenando eventos?

Soy nuevo en esto, construí una aplicación de chat web estándar y veo el poder de nodejs, express, socket.io.

Lo que estoy tratando de hacer es activar eventos de un teléfono a un sitio web, como un control remoto. Hay un servidor javascript que escucha los eventos del cliente, y el cliente javascript que dispara esos eventos, así es como entiendo que me corrija si estoy equivocado.

Aprendí en la aplicación de chat que puedo enviar un objeto desde cualquier lugar, siempre que estén conectados a mi servidor a través de un puerto específico http://my-server-ip:3000/ . Básicamente, todos los eventos están dentro de la página de índice, y la conexión es index a server para index .

Lo que estoy tratando de aprender es cómo desencadenar eventos desde una página externa, he visto cosas como http://my-server-ip:3000/ws o algo así, la idea es conectarse a una interfaz móvil que no es el índice o el sitio web en sí, pero esta interfaz se comunica con el servidor de nodos y lo utiliza como distribuidor para activar eventos en la página de índice principal.

Básicamente, lo que aprendí fue index al server para index . No estoy seguro de cómo puedo ir custom-page al server para index .

Veo que en mi app.js, mi entendimiento es que el socket escucha los sends que están en el cliente y luego emite el mensaje.

 io.sockets.on('connection', function (socket) { socket.on('sends', function (data) { io.sockets.emit('message', data); }); }); 

Intenté crear un test.html que tiene un botón, intenté escucharlo, aquí hay una captura de pantalla.

introduzca la descripción de la imagen aquí

Aquí está mi código de cliente

 window.onload = function() { var messages = []; var socket = io.connect('http://my-server-ip:3000/'); var socketTwo = io.connect('http://my-server-ip:3000/test.html'); var field = document.getElementById("field"); var sendButton = document.getElementById("send"); var content = document.getElementById("content"); var name = document.getElementById("name"); var trigBtn = document.getElementById("trigger-btn"); socket.on('message', function (data) { if(data.message) { messages.push(data); var html = ''; for(var i=0; i<messages.length; i++) { html += '' + (messages[i].username ? messages[i].username : 'Server') + ': '; html += messages[i].message + '
'; } content.innerHTML = html; } else { console.log("There is a problem:", data); } }); //FROM DEMO // sendButton.onclick = sendMessage = function() { // if(name.value == "") { // alert("Please type your name!"); // } else { // var text = field.value; // socket.emit('send', { message: text, username: name.value }); // field.value = ""; // } // }; //I include this javascript with test.html and trigger //this button trying to emit a message to socketTwo trigBtn.onclick = sendMessage = function() { socketTwo.emit('send', { message: 'String test here' }) } }

Estoy seguro de que todo está mal, pero espero que esto tenga sentido y que alguien pueda ayudarme a desencadenar eventos desde otra página activando el índice.

Aquí está mi código de servidor app.js

 /** * Module dependencies. */ var express = require('express') , routes = require('./routes') , http = require('http'); var app = express(); var server = app.listen(3000); var io = require('socket.io').listen(server); // this tells socket.io to use our express server app.configure(function(){ app.set('views', __dirname + '/views'); app.set('view engine', 'jade'); app.use(express.favicon()); app.use(express.logger('dev')); app.use(express.static(__dirname + '/public')); app.use(express.bodyParser()); app.use(express.methodOverride()); app.use(app.router); }); app.configure('development', function(){ app.use(express.errorHandler()); }); app.get('/', routes.index); app.get('/test.html', function(req, res) { res.send('Hello from route handler'); }); io.sockets.on('connection', function (socket) { socket.emit('message', { message: 'welcome to the chat' }); socket.on('send', function (data) { io.sockets.emit('message', data); }); }); 

Todo el código publicado anteriormente es solo un código de prueba de cookies, estoy aprendiendo desde cero, por lo que se puede cambiar por completo lo anterior, solo está ahí como punto de partida.

Esto es tan genial que lo hice funcionar, así que mi lógica era correcta. Solo faltaban algunas cosas. Aquí está.

No voy a publicar todo el código javascript del lado del servidor, pero aquí está la lógica principal después de escuchar el puerto, etc.

 // Set a route and in a very dirty fashion I included a script specific // for this route, earlier I was using one script for both route. // I also forgot to include the socket.io hence the error in the image above. app.get('/test', function(req, res) { res.send(''); }); // This listens to `send` which is defined in the `test` route // Upon this action the server emits the message which // is defined inside the index main route I want stuff displayed io.sockets.on('connection', function (socket) { socket.on('send', function (data) { io.sockets.emit('message', data); }); }); 

Así es como se ve el script de índice, cliente js

 window.onload = function() { var messages = []; var socket = io.connect('http://my-server-ip:3000'); var content = document.getElementById("content"); socket.on('message', function (data) { if(data.message) { messages.push(data); var html = ''; for(var i=0; i'; html += messages[i].message + '
'; } content.innerHTML = html; } else { console.log("There is a problem:", data); } }); }