私はsocket.ioとnode.jsで簡単なアプリケーションを作成しました。これはプッシュ通知サービスです。 ユーザがWebSocketに接続すると、ユーザ名(およびダッシュボードの名前)が送信され、すぐにユーザ名の部屋に参加します。アプリケーションはPOST要求をリッスンし、保存してユーザーの部屋にメッセージを送信します。Socket.IOルームはAzureでは動作しませんが、ローカルで作業しています
io.on('connection', function(socket) {
socket.on('userid', function(data) {
socket.join(data.userid+'-'+data.dashboard);
notification.find({userid: data.userid, to: data.dashboard, received_by_user: false}, function(err, notifs) {
socket.emit('get_notifications', notifs);
}
}
});
app.post('/notify', function(req, res, next) {
var notif_recv = new notification(req.body);
notif_recv.save(function (err, notif_recv) {
io.sockets.in(notif_recv.userid+'-'+notif_recv.dashboard).emit('new_notification', notif_recv);
});
res.send(200);
});
私は、ローカルノードでそれをテストするとき、それは私が/notify
にPOST
を送信し、私は通知がダッシュボードに到着見ることができ、正常に動作します。問題は、私がAzureのAppServiceでテストすると、クライアントはWebSocketに接続して最初の通知(get_notifications
イベント)を受信しますが、POST
から/notify
になると、クライアントは何も受信しません。 (no new_notification
イベント、io.sockets.in(...).emit(...)
はAzureで動作しないようです)。デバッグ目的のために
は、私はio.socket.in(...).emit(...)
は、任意のチャンネルと接続せずに、IOサーバーを返すように思われること、その結果、サーバーの機能socket.join(...)
とio.sockets.in(...).emit(...)
の戻り値をログに記録するにconsole.log(...)を使用しました!
IISはそれを乱用する可能性がありますか?私はIISがapp.post('/notify'...
とio.on('connection'...
のために異なるプロセスを持っていると思う傾向があるので、私がapp.postで参照しているソケットは、私がio.on('connection'..
(socket.join(...)
)というユーザに加わっているからです。
Azure/IISでsocket.ioの部屋を使用するときのヒント? ありがとう!
アプリケーションでポートをどのように設定しますか?あなたは 'app.listen(process.env.PORT);を使用しようとしましたか? –
はい、私は 'varポート= normalizePort(process.env.PORT || '8090'); ' 私は問題がIISがSocket.IO部屋のプロトコルで厄介だと思う... – jam