Nodejs和webSockets,触发事件?

我是新手,我build立了一个标准的networking聊天应用程序,我看到了nodejs,express,socket.io的强大function。

我试图做的是触发从电话到网站的事件,如遥控器。 有服务器的JavaScript监听来自客户端的事件,并触发这些事件的客户端JavaScript,这是我的理解,如果我错了,正确的我。

我在聊天应用程序中了解到,只要通过特定的端口http://my-server-ip:3000/连接到我的服务器,我就可以从任何地方发送一个对象。 基本上所有的事件都在索引页面内,并且连接是server index

我试图学习的是如何从外部页面触发事件,我已经看到像http://my-server-ip:3000/ws或类似的东西,这个想法是连接到一个移动接口不是实际的索引或网站本身,而是这个接口与节点服务器通信,使用它作为调度器来触发主索引页面上的事件。

基本上我学到的是server index 。 我不知道如何可以custom-pageserver index

我看到,在我的app.js,我的理解是,套接字侦听sends在客户端上,然后它发出的消息。

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

我试图创build一个test.html,它有一个button,我试着听它,这里是一个屏幕截图。

在这里输入图像说明

这是我的客户端代码

 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 += '<b>' + (messages[i].username ? messages[i].username : 'Server') + ': </b>'; html += messages[i].message + '<br />'; } 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' }) } } 

我相信这是错的,但希望这是有道理的,有人可以帮助我触发事件从另一个页面触发索引。

这是我的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); }); }); 

以上所有的代码只是testingcookie代码,我正在从头学习,所以上述可以完全改变,这只是作为一个起点。

       

网上收集的解决方案 "Nodejs和webSockets,触发事件?"

这是如此的酷我得到它的工作,所以我的逻辑是正确的。 只有几件事我错过了。 这里是。

我不打算发布所有的服务器端JavaScript代码,但这里是听取端口后的主要逻辑

 // 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('<script src="/socket.io/socket.io.js"></script><script type="text/javascript" src="javascripts/trigger.js"></script><button id="test" class="trigger-btn">Trigger</button>'); }); // 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); }); }); 

这里是索引客户端,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<messages.length; i++) { html += '<b>' + (messages[i].username ? messages[i].username : 'Server') + ': </b>'; html += messages[i].message + '<br />'; } content.innerHTML = html; } else { console.log("There is a problem:", data); } }); }