Meteor でデータ機密性の高いアプリケーションを作成しており、クライアント アクセスをできるだけ多くの情報に制限しようとしています。したがって、ログインしている匿名のユーザーの数をカウントする方法をサーバー側に実装したいと考えています。
私はさまざまな方法を試しました。1 つ目は、この質問Server cleanup after a client disconnectsで概説されているとおりで、以下にフックすることを示唆しています。
this.session.socket.on("close")
ただし、コレクションを変更しようとすると、「Meteor コードは常にファイバー内で実行する必要があります」というエラーがスローされました。この問題は、ソケットが閉じられるとファイバーが強制終了され、データベースにアクセスできなくなるためだと思います。OPは、可能な解決策としてサーバーでCollection.insertを呼び出すときに、この「Meteorコードは常にファイバー内で実行する必要がある」と指摘しましたが、回答へのコメントに基づいて、それが最善の方法であるかどうかはわかりませんでした。
次に、変数で自動実行を試みました。
Meteor.default_server.stream_server.all_sockets().length
しかし、自動実行は呼び出されていないようだったので、変数はリアクティブなコンテキストではないと想定しており、それを作成する方法がわかりませんでした.
最後のアイデアは、キープアライブ スタイルの処理を行うことでしたが、それは Meteor の哲学の趣旨に完全に反しているように思われます。絶対的な最後の手段としてのみ使用すると思います。
console.log
で関数を実行しましたが、this.session.socket
可能な他の関数は だけでし.on("data")
たが、これはソケットが閉じているときに呼び出されません。
私はここで少し途方に暮れているので、どんな助けも素晴らしいでしょう、ありがとう.