質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

サーバ

サーバは、 クライアントサーバモデルにおいてクライアントからの要求に対し 何らかのサービスを提供するプログラムを指す言葉です。 また、サーバーソフトウェアを稼動させているコンピュータ機器そのもののことも、 サーバーと呼ぶ場合もあります。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

Q&A

2回答

2692閲覧

チャットの未読数管理

teratech

総合スコア17

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

サーバ

サーバは、 クライアントサーバモデルにおいてクライアントからの要求に対し 何らかのサービスを提供するプログラムを指す言葉です。 また、サーバーソフトウェアを稼動させているコンピュータ機器そのもののことも、 サーバーと呼ぶ場合もあります。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

0グッド

0クリップ

投稿2017/06/23 07:44

お世話になります。
チャット機能の付いたwebアプリケーションを構築しております。
仕様と開発環境は、以下になります。

[仕様]
・未読チャット数が表示される
・複数の人が同アカウントに同時にログインできる
・PCで使用される

[開発状況]
・サーバーサイド:
言語はPHP, データベースはリレーショナルDBです。
アカウント毎に未読数も保存しています。

・クライアントサイド:
ajaxで未読数を監視し、変更があればhtmlを書き換えてます。
未読チャットを開くと未読数をリセットしています。

[困っていること]
Aさん、Bさん、Cさんが、同時にアカウント#0001でログインしているとします。
この場合、Aさんが未読チャットを開いてしまうと、BさんとCさんの未読表示数も0となってしまいます。
同時にログインしているAさんは0通、Bさんは4通、Cさんは2通・・・のように、その時にログインしている人毎に未読数を表示するにはどういった方法がベストなのでしょうか。
なお、初回ログイン時は全数が表示、それを開いた後はログイン状態を保っている限り、自身の未読数が表示されるという形にできればと思います。

[検討したこと]
アカウントを分けるのが分かりやすいのですが、ログインする人は不特定多数のため、その人毎にアカウントを発行できない現状です。
sessionやlocalStorageに自身の未読数をセットする方法がいいかと考えておりますが、何か良い方法があればアドバイス頂ければ幸いです。

宜しくお願い申し上げます。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

要求と仕様が相いれないので
どう頑張ってもユーザの意図した未読数が出ないケースが
多々出てくるかと思います。
無理に対応しようとすると、おそらくバグの温床になります。

とした上で、例えば、
websocketを利用し、サーバからpushする。
未読数の算出はクライアントで行う。
サーバで未読は管理しない。

あとは本当に未読として管理が必要か?
新着(1時間以内投稿)通知でもいいのでは?
要求に対して提案できる立場であれば、やってみる価値はあるかと。

投稿2017/06/23 08:53

szk.

総合スコア1400

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

teratech

2017/06/23 09:20

ご回答頂きまして、ありがとうございます。 kunai様にコメントした内容において、新着があった時にlocalStorageに更新分をpushするところでwebsocketを使えるかもしれませんね。 websocketを使用したことがないので、勉強してみます。
guest

0

仕様に問題があるので、アカウントを分ける事を考えるのが一番だと思いますが。。

どうしてもやるのであれば、有効期限が年単位等長期間のCookieを発行し、サーバで生成したユニークID的なものをCookieに格納して、以後はそのIDで未読管理を行うとかですかね。
ただ、Cookieなのでブラウザが変われば別モノになりますし、Cookieが消えると全部が未読になるなど、あまりお勧め出来ない仕様ですが。

投稿2017/06/23 07:55

kunai

総合スコア5405

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

teratech

2017/06/23 09:14

ご回答頂きまして、ありがとうございます。 私もアカウントをなんとか分けたいのですが・・・ どうしてもやる場合、以下はどう思われますか? ・データベースには全チャット数を格納、更新していく。 ・クライアント側では、ログイン時にlocalStorageに全チャット数を格納し、1回チャットを開いた後はlocalStorageに格納されている数と、データベースに格納されている数との差分を表示する。(初回はチャットされているものがあるとだけ示すのみ) なお、ブラウザは指定されておりますので、ブラウザを変える可能性は考慮しなくて問題ございません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問