2016-08-01 51 views
0

WebSocketの実装にNode.JSExpress v4socket.ioを使用しています。NodeJS Express Socket.io別ファイルへの実装

マイapp.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); 
     }); 

をコード - エクスポートしたい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; 

のようなものです。

だから、私が行っていることは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です。

ご協力いただきありがとうございます。 http://socket.io/get-started/chat/から

答えて

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

Socket.IOは、二つの部分

  • のNode.js HTTPサーバー(またはマウント)と統合サーバーで構成されている:
  • 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

申し訳ありませんが、私はあなたの質問を完全に理解してはいけません。 –