クライアントがボタンをクリックして領収書を確認するまで、X秒ごとにクライアントにメッセージを送信したいとします。socket.ioはクライアントが応答するまでループしますか?
これをどのように達成するかについてのアイデアはありますか? New to Nodeだが、NodeとSockets.ioでこれを行うことができると期待している。
私は正しい方向に私を得るために、あらゆる洞察力や助けに感謝します。
クライアントがボタンをクリックして領収書を確認するまで、X秒ごとにクライアントにメッセージを送信したいとします。socket.ioはクライアントが応答するまでループしますか?
これをどのように達成するかについてのアイデアはありますか? New to Nodeだが、NodeとSockets.ioでこれを行うことができると期待している。
私は正しい方向に私を得るために、あらゆる洞察力や助けに感謝します。
これを達成する最良の方法は、 "vanilla" Node.jsイベントクラスを拡張する新しいクラスを作成することだと思います。あなたはそのように最初にそれを必要とする必要があります。
const EventEmitter = require('events');
class MyEmitter extends EventEmitter {}
https://nodejs.org/api/events.html
あなたが行う必要がありますどのようなクラスが、そうするように、子プロセスを作成して持ったら、あなたはを参照することができますここに公式ドキュメント:このプロセス内
あなたのループを作成し、ソケットを介してメッセージを送信することができます。イベントクラスを拡張する目的は、特定のイベント(ソケットが閉じられているか、追跡したいものなど)を検出するために聞くことができるInsideイベントエミッションを作成できるようにすることです。
これは単にあなたにそれを行う方法のアイデアを与えるために、簡単なセットアップです:
ノードサーバー(非常に基本的な、唯一socket.io、何もない):
const io = require('socket.io')(3000);
const interval = 1000;
io.on('connection', function (socket) {
console.log(socket.id + ' has connected');
var foo = setInterval (function() {
socket.emit('foo');
}, interval);
socket.on('confirmed', function() {
console.log('confirmation received from ' + socket.id);
clearInterval(foo);
});
});
console.log('socket.io server started at port 3000');
index.htmlを(ブラウザで開き、何が起こるかを確認してください):
<!doctype html>
<html>
<head>
<title>Testing socket.io</title>
</head>
<body>
<button id="button">Confirm</button>
<p id="socket">waiting...</p>
<p id="alert">foos counter: </p>
<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/1.7.3/socket.io.min.js"></script>
<script>
var socket = io("http://localhost:3000");
var counter;
socket.on('connect', function() {
counter = 0;
document.getElementById("socket").innerHTML = "connected";
document.getElementById("button").addEventListener("click", function() {
socket.emit("confirmed");
});
});
socket.on('foo', function() {
counter++;
document.getElementById("alert").innerHTML = "foos counter: " + counter;
});
</script>
</body>
</html>
これは本当にうまくいく、私はちょうど私の特定の場合にそれを適応させることを見る必要がある。おかげさま...今夜や明日にもっと掘り下げよう。私は最初の答えも良いと確信していますが、それは私の頭のスキルを賢明に少し超えています。 – Todd
OK、これをそこに投げ込ませてください。サーバー側のsocket.idが分からないとどうなりますか?基本的にはたくさんの人が接続しますが、すべてのsocket.idを追跡することはありません。接続が完了すると、サーバーは確認が必要なアラートをサーバーから送信するまで数時間または数日間接続を維持します。私はどのように適切なクライアントにアラートを取得する方法を決定するかはわかりませんが、私はブロードキャストを行い、クライアント側でメッセージをフィルタリングすることを考えました。たぶん名前空間はそれを助けますが、私は名前空間についてもっと読む必要があります。申し訳ありませんが良い説明です。 – Todd
たぶん、socket.idをDBで追跡する必要がありますか?だからこのようなもの..ブラウザで接続するときに顧客IDを送信し、socket.id = blah、customerid = 329のようにサーバー側のDBレコードに設定します。次に、私が顧客に送る必要があるサーバ上に何かがあるとき、私は現在のsocket.idを検索して、そのsocket.idに直接送ることができますか?多分私はここの森で行くだろうが、私の歯車は回転している。いずれにしても、助けてくれてありがとう。 – Todd
あなたのご返答ありがとうございます、これは私の頭のスキルを少し賢明です。しかし、それを感謝し、私はそれが良い情報だと確信してすぐにいくつかの時点でさらに掘り起こすだろう、ちょうど私がノードnewbのビットであるように少し頭を回転させる。 – Todd