質問するログイン新規登録

回答編集履歴

5

微修正

2020/04/01 11:19

投稿

katsubemakito
katsubemakito

スコア72

answer CHANGED
@@ -8,7 +8,7 @@
8
8
  0. 各フレンドの最終リクエスト時間がn秒以内ならオンラインとする(nは適当に調整)
9
9
 
10
10
  厳密にオンラインか判断することはできませんが手軽に実装できます。
11
- これらの情報はファイルやMySQLなどのRDBに保存しても良いのですが、ユーザー数が増えてくると苦しくなってきますのでMemcachedやRedisなどメモリ上で読み書きできるミドルウェアを併用されるのがよろしいかと思います。
11
+ これらの情報はファイルやMySQLなどのRDBに保存しても良いのですが、ユーザー数が増えてくると苦しくなってきますのでMemcachedやRedisなどメモリ上で読み書きできるミドルウェアを併用されるのがよろしいかと思います。(フレンド数の上限が多いと通信量がそれなりに増えますのでご留意ください)
12
12
 
13
13
  リアルタイム性が必須ということですとロングポーリングを利用する方法があげられます。簡単に言うとブラウザとサーバの間をずっと繋ぎっぱなしにする技術で、ブラウザから接続されたらサーバ上のデータにフラグを立て、切断されたらフラグを下ろすような作りになります。フレンドのフラグの状態に変化があった場合に接続中のユーザーに最新の情報を通知します。ユーザーが繋ぎっぱなしになりますので、開発されているサービスの同時接続数が非常に多い場合はそのままコストに跳ね返って来やすいので注意が必要です。
14
14
 

4

微修正

2020/04/01 11:19

投稿

katsubemakito
katsubemakito

スコア72

answer CHANGED
@@ -1,5 +1,5 @@
1
1
  ブログをご覧いただきありがとうございます。
2
- URLにあるサンプルのようにFirebaseを利用するとJavaScriptだけで完結するので楽ちんなのですが、独自で実装されたいということでしょうか?(Firebaseは個人利用の範囲であればほぼ無料で利用できます)
2
+ URLにあるサンプルのようにFirebaseを利用するとブラウザ側のJavaScriptだけで完結するので楽ちんなのですが、独自で実装されたいということでしょうか?(Firebaseは個人利用の範囲であればほぼ無料で利用できます)
3
3
 
4
4
  ぱっと思いつくアイデアとしては例えば擬似的にオンラインか判断する以下のような方法でしょうか。
5
5
 

3

追記

2020/04/01 11:17

投稿

katsubemakito
katsubemakito

スコア72

answer CHANGED
@@ -10,7 +10,7 @@
10
10
  厳密にオンラインか判断することはできませんが手軽に実装できます。
11
11
  これらの情報はファイルやMySQLなどのRDBに保存しても良いのですが、ユーザー数が増えてくると苦しくなってきますのでMemcachedやRedisなどメモリ上で読み書きできるミドルウェアを併用されるのがよろしいかと思います。
12
12
 
13
- リアルタイム性が必須ということですとロングポーリングを利用する方法があげられます。簡単に言うとブラウザとサーバの間をずっと繋ぎっぱなしにする技術で、ブラウザから接続されたらサーバ上のデータにフラグを立て、切断されたらフラグを下ろすような作りになります。たこちらは開発されているサービスの同時接続数が非常に多い場合はそのままコストに跳ね返って来やすいので注意が必要です。
13
+ リアルタイム性が必須ということですとロングポーリングを利用する方法があげられます。簡単に言うとブラウザとサーバの間をずっと繋ぎっぱなしにする技術で、ブラウザから接続されたらサーバ上のデータにフラグを立て、切断されたらフラグを下ろすような作りになります。フレンドのフラグの状態に変化があっ場合に接続中のユーザーに最新の情報を通知ます。ユーザーが繋ぎっぱなしになりますので、開発されているサービスの同時接続数が非常に多い場合はそのままコストに跳ね返って来やすいので注意が必要です。
14
14
 
15
15
  本格的にリアルタイム性が必要ということですと、オンライン状態を管理するサーバを立ち上げることになりますが、Node.jsのSocket.ioなどを利用されるとコーディング自体は簡単にできますよ。
16
16
 

2

微修正

2020/04/01 11:16

投稿

katsubemakito
katsubemakito

スコア72

answer CHANGED
@@ -1,15 +1,16 @@
1
1
  ブログをご覧いただきありがとうございます。
2
2
  URLにあるサンプルのようにFirebaseを利用するとJavaScriptだけで完結するので楽ちんなのですが、独自で実装されたいということでしょうか?(Firebaseは個人利用の範囲であればほぼ無料で利用できます)
3
3
 
4
- ぱっと思いつくアイデアとしては例えば以下のようなでしょうか。
4
+ ぱっと思いつくアイデアとしては例えば擬似的にオンラインか判断する以下のような方法でしょうか。
5
5
 
6
6
  0. 30秒毎など定期的にサーバへリクエストする
7
7
  0. レスポンスとしてフレンドの最終リクエスト時間を取得する
8
8
  0. 各フレンドの最終リクエスト時間がn秒以内ならオンラインとする(nは適当に調整)
9
9
 
10
+ 厳密にオンラインか判断することはできませんが手軽に実装できます。
10
11
  これらの情報はファイルやMySQLなどのRDBに保存しても良いのですが、ユーザー数が増えてくると苦しくなってきますのでMemcachedやRedisなどメモリ上で読み書きできるミドルウェアを併用されるのがよろしいかと思います。
11
12
 
12
- またはロングポーリングを利用する方法もあります、開発さているサービスの同時接続数が非常に多い場合はそのまコストに跳ね返ってきます。簡単に言うとブラウザとサーバの間をずっと繋ぎっぱなしにする技術で、ブラウザから接続されたらサーバ上のデータにフラグを立て、切断されたらフラグを下ろすような作りになります。
13
+ リアルタイム性が必須ということですとロングポーリングを利用する方法があげられます。簡単に言うとブラウザとサーバの間をずっと繋ぎっぱなしにする技術で、ブラウザから接続されたらサーバ上のデータにフラグを立て、切断されたらフラグを下ろすような作りになります。ただしこちらは開発されているサービスの同時接続数が非常に多い場合はそのままコストに跳ね返って来やすいので注意が必要です。
13
14
 
14
15
  本格的にリアルタイム性が必要ということですと、オンライン状態を管理するサーバを立ち上げることになりますが、Node.jsのSocket.ioなどを利用されるとコーディング自体は簡単にできますよ。
15
16
 

1

追記

2020/04/01 09:20

投稿

katsubemakito
katsubemakito

スコア72

answer CHANGED
@@ -9,6 +9,7 @@
9
9
 
10
10
  これらの情報はファイルやMySQLなどのRDBに保存しても良いのですが、ユーザー数が増えてくると苦しくなってきますのでMemcachedやRedisなどメモリ上で読み書きできるミドルウェアを併用されるのがよろしいかと思います。
11
11
 
12
+ またはロングポーリングを利用する方法もありますが、開発されているサービスの同時接続数が非常に多い場合はそのままコストに跳ね返ってきます。簡単に言うとブラウザとサーバの間をずっと繋ぎっぱなしにする技術で、ブラウザから接続されたらサーバ上のデータにフラグを立て、切断されたらフラグを下ろすような作りになります。
12
13
 
13
14
  本格的にリアルタイム性が必要ということですと、オンライン状態を管理するサーバを立ち上げることになりますが、Node.jsのSocket.ioなどを利用されるとコーディング自体は簡単にできますよ。
14
15