2016-11-22 9 views
0

Express.JS(Expressアプリケーションジェネレータを使用)と組み合わせてSocket.ioを使用しようとしています。
私はこれを行う方法をいくつか見つけました(Using socket.io in Express 4 and express-generator's /bin/www)。
私の問題は、私がルートフォルダ内のソケットを利用することができないということです。 私はapp.jsとbin/www.jsファイルでそれらを使用できます。私が経路index.jsを呼び出すと、エラーを出さずに長時間Webページをロードし続けるだけです。

ビン/Socket.ioとExpress.JSの併用(Expressアプリケーションジェネレータを使用)

... 
/** 
* Create HTTP server. 
*/ 

var server = http.createServer(app); 

var io  = app.io 
io.attach(server); 
... 

app.js

... 
// Express 
var app = express(); 

// Socket.io 
var io = socket_io(); 
app.io = io; 
var routes = require('./routes/index')(io); 
... 

ルート/ index.jsここ

module.exports = function(io) { 
    var app = require('express'); 
    var router = app.Router(); 

    io.on('connection', function(socket) { 
     console.log('User connected'); 
    }); 

    return router; 
} 
+0

私の答えはあなたを助けましたか?コメントはありますか?それがあなたを助けたなら、あなたは[回答を受け入れる](http://meta.stackexchange.com/a/5235/157646)を検討して、それを探している他の人がそれが受け入れられた答えを持っているのを見ることができます。 – rsp

答えて

2

がどのように簡単な例をwww.jsでSocket.ioを使う

をバックエンドのコードはこれです:あなたがここに見ることができるように

var path = require('path'); 
var app = require('express')(); 
var http = require('http').Server(app); 
var io = require('socket.io')(http); 
app.get('/', (req, res) => { 
    console.error('express connection'); 
    res.sendFile(path.join(__dirname, 'si.html')); 
}); 
io.on('connection', s => { 
    console.error('socket.io connection'); 
    for (var t = 0; t < 3; t++) 
    setTimeout(() => s.emit('message', 'message from server'), 1000*t); 
}); 
http.listen(3002,() => console.error('listening on http://localhost:3002/')); 
console.error('socket.io example'); 

は、私が作成しています、https://github.com/rsp/node-websocket-vs-socket.io/blob/master/si.js

を参照してください、私はここにGitHubの上で利用できるようにすることを表明エクスプレスアプリ:

var app = require('express')(); 

その後、私はそのアプリでhttpサーバを作成します。

var http = require('http').Server(app); 

そして最後に、私はhttpサーバがSocket.ioのインスタンスを作成することを使用します。

var io = require('socket.io')(http); 

実行した後:

http.listen(3002,() => console.error('listening on http://localhost:3002/')); 

すべてが一緒に機能します。

GitHubには、バックエンドコードとフロントエンドコードの両方が動作する例があります。現在、Express 4.14.0とsocket.io 1.4.8を使用しています。