2017-06-22 7 views
0

socket.ioがどのように動作するかについての基本的な誤解があるか、誰も知らない(ほとんど不可能な)バグを見つけています。ExpressでSocket.ioを実行すると、エクスプレスルート内で動作しません

私はexpressをsocket.ioと統合しようとしています。クライアント側では、すべてがうまくいきます:ユーザーがボタンをクリックし、イベントが発生し、誰もが幸せです。

ただし、ページを表示する前にエクスプレスルートからこのイベントを発生させたいとします。イベントは決して放出されないようです。私が見てきたこのすべての質問から、私は単に自分のアプリケーションに "io"インスタンスを接続してから、私のルート内からアクセスすることができるはずです。

だからこれは私の設定です...

// index.js

var app = express(); 
var port = process.env.PORT || 3700 

var io = require('socket.io').listen(app.listen(port)); 
io.on('connection', function (socket) { 
    console.log("Socket connected on port " + port) 

    socket.on('send', function (data) { 
     console.log("WAFFLES") 
    }); 
}); 
console.log('The magic happens on port ' + port); 

require('./app/routes.js')(app, io); 

//アプリ/ routes.js

module.exports = function(app, io){ 

    app.get('/', function(req, res){ 

    io.on('connection', function (socket) { 
     console.log("Hello from the route!") 
     socket.emit('send', {message: 'urdum'}) 
    }); 

    res.render('index') 
    }) 
} 

だからこの例では、私がしたいです/ routeに入ることができるようになりました。 "send from"イベントが発生した後、 "Hello from the route"を参照し、コンソールにログオンした "WAFFLES"を参照してください。代わりに私は絶対に何も得ません。

私はapp.set( 'socketio'、io)で "io"を渡そうとしました。しかし何があっても、何も働かない。

私も、私は基本的に持っているio.on( '接続')せずにルート内のイベントを放出し、単純に

io.emit('send' ...) 

OR

io.sockets.emit('send' ...) 

答えて

1

をやってみましたsocket.ioがどう働くのか誤解

あなたは正しい、

これはソケット-IOのための典型的なセットアップで、ルータにhttps://socket.io/docs/

// index.js 

var express = require('express'); 
var socketio = require('socket.io'); 
var http = http = require('http'); 
var app = express(); 

// Attach Socket.io 
var server = http.createServer(app); 
var io = socketio.listen(server); 
app.set('socketio', io); // <-- bind socket to app 
app.set('server', server); // <-- optional 
io.on('connection', function (socket) { 
    console.log("Socket connected on port " + port); 
}); 
app.listen(3000); 
server.listen(3001) // <-- socket port 
// app.get('server').listen(3001); // <-- use server or app.get('server') 

で続きを読む、req.app.get('socketio');

// app/routes.js 
module.exports = function(app, io){ 

    app.get('/', function(req, res){ 
    var socketio = req.app.get('socketio'); 

    socketio.emit('send', {message: 'urdum'}); 

    res.render('index') 
    }) 
} 
によるアクセスソケット
関連する問題