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' ...)