2016-08-01 35 views
0

我使用Node.JSExpress v4socket.io实现WebSocket。NodeJS Express Socket.io实施在一个单独的文件

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

在此先感谢您的帮助。

回答

0

我已经解决了这个问题。我们需要分享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); 
} 

一切工作:)。

-1

http://socket.io/get-started/chat/

Socket.IO是由两个部分组成

  • 与集成服务器(或安装在)的Node.js HTTP服务器:socket.io
  • 加载在浏览器端的客户端库:socket.io客户端

您在服务器和客户端上为套接字编写处理程序/发射器。客户端处理程序/发射器必须包含在客户端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! 
}); 
+1

嗨,你说的是一个普遍的概念,每个人都知道。如果你想帮忙,请回答我的具体问题。谢谢 –

+0

对不起,我一定不完全明白你的问题。 –