我正在尝试使用nodejs,express& amp为一个画廊构建一个遥控器。 socket.io。
结构如下
/index.js
/public/screen.html
/screen.js
/remote.html
/remote.js
我们的想法是在remote.html
上显示一个图库,选择一个并使用socket.io将所选索引发送到screen.html
。
截至目前,我的代码如下所示:
index.js
var express = require('express');
var app = require('express')();
var server = require('http').Server(app);
var io = require('socket.io').listen(server);
app.use(express.static('public'));
server.listen(8080, function(){
// setup image gallery and stuff...
connectToServer();
});
remote.js中
var socket = null;
document.addEventListener("DOMContentLoaded", function(event) {
//some stuff
connectToServer();
});
function showImage (index){ //called by events
console.log('selected incdex: ' + index);
if(socket != null) {
socket.emit('selection', {id: index});
};
}
function connectToServer(){
socket = io.connect('http://localhost:8080');
socket.on('connection', function (socket) {
var text = document.querySelector('#name');
socket.emit('newRemote', 'new remote connected');
console.log('emitted welcome');
socket.on('newScreen', function (data) {
console.log(data);
});
});
}
screen.js
var socket = null;
document.addEventListener("DOMContentLoaded", function(event) {
//some stuff
connectToServer();
});
function connectToServer(){
socket = io.connect('http://localhost:8080');
socket.on('connection', function (socket) {
var text = document.querySelector('#name');
socket.emit('newScreen', { name: name });
socket.on('newRemote', function (data) {
console.log(data);
});
});
};
从node index.js
开始时我得到了
listening on *:8080
当加载screen或remote.html时我得到了
debug - client authorized
info - handshake authorized MwtGFRCZamcyKkUpK5_W
我认为:不知何故建立了连接,但是:
两端都没有发送/接收消息 没有日志打印到控制台以进行连接事件
知道为什么没有发生任何事情?
答案 0 :(得分:0)
您的客户端似乎已经混合了服务器端代码。 '连接' event是需要在服务器上侦听的事件,而不是客户端文件。此外,您无法直接从服务器端代码调用客户端功能。 以下代码不起作用:
server.listen(8080, function(){
// setup image gallery and stuff...
connectToServer();
});
要实现上述目标,您需要在服务器上放置以下代码:
server.listen(8080, function(){
socket.on('connection', function (socket) {
// setup image gallery and stuff...
socket.emit('connectToServer', myPassedParameters);
});
});
以下是客户端上该事件的监听器:
socket.on('connectToServer', function (myPassedParameters) {
var text = document.querySelector('#name');
// stuff for client side here
});
});
除了上述内容之外,您无法使用socket.io从一个客户端文件调用另一个客户端文件。您必须先对服务器进行调用,然后在为用户加载后调用另一个文件上的函数。