NodeJS Express Socket.io 在单独的文件中实现
NodeJS Express Socket.io Impletation in a Seperate File
我正在使用 Node.JS Express v4 and socket.io 来实现 WebSocket。
我的app.js是这样的-
var express = require('express');
var socket_io = require( "socket.io" );
var path = require('path');
var favicon = require('serve-favicon');
//var controllers = require('./controllers');
//var middleware = require('./middleware');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
// Express
var app = express();
// Socket.io
var io = socket_io();
app.io = io;
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'hbs');
app.set('view options', { layout: false }); //Disabling default layout
require('./view_partials')(app);
// uncomment after placing your favicon in /public
app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
require('./routes')(app);
//// Socket.io server listens to our app
//Server - Data received
// Send current time to all connected clients
function sendTime()
{
io.emit('time', { time: new Date().toJSON() });
}
// Send current time every 10 secs
setInterval(sendTime, 10000);
//Client - Data received
// Emit welcome message on connection
io.on('connection', function(socket)
{
// Use socket to communicate with this particular client only, sending it it's own id
socket.emit('welcome', { message: 'Welcome!', id: socket.id });
socket.on('i am client', console.log);
});
////////////////////////////////////////
require('./errors')(app);
module.exports = app;
我喜欢导出这段代码-
//Client - Data received
// Emit welcome message on connection
io.on('connection', function(socket)
{
// Use socket to communicate with this particular client only, sending it it's own id
socket.emit('welcome', { message: 'Welcome!', id: socket.id });
socket.on('i am client', console.log);
});
到一个新文件。
所以,我的做法是这样的-
client.js-
//Client - Data received
// Emit welcome message on connection
io.on('connection', function(socket)
{
// Use socket to communicate with this particular client only, sending it it's own id
socket.emit('welcome', { message: 'Welcome!', id: socket.id });
socket.on('i am client', console.log);
});
app.js-
var express = require('express');
var socket_io = require( "socket.io" );
var path = require('path');
var favicon = require('serve-favicon');
//var controllers = require('./controllers');
//var middleware = require('./middleware');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
// Express
var app = express();
// Socket.io
var io = socket_io();
app.io = io;
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'hbs');
app.set('view options', { layout: false }); //Disabling default layout
require('./view_partials')(app);
// uncomment after placing your favicon in /public
app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
require('./routes')(app);
//// Socket.io server listens to our app
//Server - Data received
// Send current time to all connected clients
function sendTime()
{
io.emit('time', { time: new Date().toJSON() });
}
// Send current time every 10 secs
setInterval(sendTime, 10000);
require('./websocket/client');
////////////////////////////////////////
require('./errors')(app);
module.exports = app;
但是既没有给我错误也没有不工作。
谁能帮忙,我怎样才能将它导出到一个单独的文件中,以便可以分离客户端和服务器代码?
可以找到我的完整代码 here。
在此先感谢您的帮助。
来自http://socket.io/get-started/chat/:
Socket.IO is composed of two parts
- A server that integrates with (or mounts on) the Node.JS HTTP Server: socket.io
- A client library that loads on the browser side: socket.io-client
您为服务器和客户端上的套接字编写 handlers/emitters。客户端 handlers/emitters 必须包含在客户端 javascript 中,客户端浏览器才能访问它们。客户端 javascript 始终位于与服务器端代码不同的文件中。
您可以查看上面链接的 Socket.IO 入门教程以获取更多信息。
作为一个简单的例子,这里是您要放入服务器代码中的内容(您的 app.js
)。此代码侦听新的客户端连接,然后向连接的客户端发出 welcome
事件。
var io = require('socket.io')(http)
// Listen for socket events
io.on('connection', function(socket) {
// a client has connected!
// emit a message to it
var msg = "Hello client!"
socket.emit('welcome', msg);
});
这是客户端上的内容 (client.js
):
var socket = io();
// add event listeners to the socket
// on 'welcome' event, log the response to console
socket.on('welcome', function(msg) {
console.log(msg);
// Hello client!
});
我已经解决了问题。我们需要共享 io
变量以包含文件。
在app.js-
require('./websocket/server')(io);
和./websocket/server.js -
// Socket.io server listens to our app
module.exports = function(io)
{
// Send current time to all connected clients
function sendTime()
{
io.emit('time', { time: new Date().toJSON() });
}
// Send current time every 10 secs
setInterval(sendTime, 10000);
}
一切正常:)。
我正在使用 Node.JS Express v4 and socket.io 来实现 WebSocket。
我的app.js是这样的-
var express = require('express');
var socket_io = require( "socket.io" );
var path = require('path');
var favicon = require('serve-favicon');
//var controllers = require('./controllers');
//var middleware = require('./middleware');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
// Express
var app = express();
// Socket.io
var io = socket_io();
app.io = io;
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'hbs');
app.set('view options', { layout: false }); //Disabling default layout
require('./view_partials')(app);
// uncomment after placing your favicon in /public
app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
require('./routes')(app);
//// Socket.io server listens to our app
//Server - Data received
// Send current time to all connected clients
function sendTime()
{
io.emit('time', { time: new Date().toJSON() });
}
// Send current time every 10 secs
setInterval(sendTime, 10000);
//Client - Data received
// Emit welcome message on connection
io.on('connection', function(socket)
{
// Use socket to communicate with this particular client only, sending it it's own id
socket.emit('welcome', { message: 'Welcome!', id: socket.id });
socket.on('i am client', console.log);
});
////////////////////////////////////////
require('./errors')(app);
module.exports = app;
我喜欢导出这段代码-
//Client - Data received
// Emit welcome message on connection
io.on('connection', function(socket)
{
// Use socket to communicate with this particular client only, sending it it's own id
socket.emit('welcome', { message: 'Welcome!', id: socket.id });
socket.on('i am client', console.log);
});
到一个新文件。
所以,我的做法是这样的-
client.js-
//Client - Data received
// Emit welcome message on connection
io.on('connection', function(socket)
{
// Use socket to communicate with this particular client only, sending it it's own id
socket.emit('welcome', { message: 'Welcome!', id: socket.id });
socket.on('i am client', console.log);
});
app.js-
var express = require('express');
var socket_io = require( "socket.io" );
var path = require('path');
var favicon = require('serve-favicon');
//var controllers = require('./controllers');
//var middleware = require('./middleware');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
// Express
var app = express();
// Socket.io
var io = socket_io();
app.io = io;
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'hbs');
app.set('view options', { layout: false }); //Disabling default layout
require('./view_partials')(app);
// uncomment after placing your favicon in /public
app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
require('./routes')(app);
//// Socket.io server listens to our app
//Server - Data received
// Send current time to all connected clients
function sendTime()
{
io.emit('time', { time: new Date().toJSON() });
}
// Send current time every 10 secs
setInterval(sendTime, 10000);
require('./websocket/client');
////////////////////////////////////////
require('./errors')(app);
module.exports = app;
但是既没有给我错误也没有不工作。
谁能帮忙,我怎样才能将它导出到一个单独的文件中,以便可以分离客户端和服务器代码?
可以找到我的完整代码 here。
在此先感谢您的帮助。
来自http://socket.io/get-started/chat/:
Socket.IO is composed of two parts
- A server that integrates with (or mounts on) the Node.JS HTTP Server: socket.io
- A client library that loads on the browser side: socket.io-client
您为服务器和客户端上的套接字编写 handlers/emitters。客户端 handlers/emitters 必须包含在客户端 javascript 中,客户端浏览器才能访问它们。客户端 javascript 始终位于与服务器端代码不同的文件中。
您可以查看上面链接的 Socket.IO 入门教程以获取更多信息。
作为一个简单的例子,这里是您要放入服务器代码中的内容(您的 app.js
)。此代码侦听新的客户端连接,然后向连接的客户端发出 welcome
事件。
var io = require('socket.io')(http)
// Listen for socket events
io.on('connection', function(socket) {
// a client has connected!
// emit a message to it
var msg = "Hello client!"
socket.emit('welcome', msg);
});
这是客户端上的内容 (client.js
):
var socket = io();
// add event listeners to the socket
// on 'welcome' event, log the response to console
socket.on('welcome', function(msg) {
console.log(msg);
// Hello client!
});
我已经解决了问题。我们需要共享 io
变量以包含文件。
在app.js-
require('./websocket/server')(io);
和./websocket/server.js -
// Socket.io server listens to our app
module.exports = function(io)
{
// Send current time to all connected clients
function sendTime()
{
io.emit('time', { time: new Date().toJSON() });
}
// Send current time every 10 secs
setInterval(sendTime, 10000);
}
一切正常:)。