2016-08-01 4 views
0

Я использую Node.JSExpress v4 и socket.io для реализации WebSocket.NodeJS Express Socket.io Импетация в отдельном файле

Мои app.js, как this-

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; 

Мне нравится экспортировать этот code-

//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); 
     }); 

в новый файл.

Итак, что я сделал, как this-

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 состоит из двух частей

  • Сервер, который интегрируется с (или устанавливается на) на сервер HTTP Node.js: Socket.io
  • Клиентская библиотека, которая загружается со стороны браузера: socket.io-client

Вы пишете обработчики/эмиттеры для сокетов как на сервере, так и на клиенте. Обработчики/эмитенты на стороне клиента должны быть включены в клиентский 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

Извините, я не должен был полностью понимать ваш вопрос. –

Смежные вопросы