2016-10-31 26 views
0

などのバックエンドASP.Netを使用してプロジェクトを作成する私と私のチーム、HTML 5iOSのフロントエンドとして。SignalRとPush通知の使い方は?

私のサービスにはチャット機能があり、ユーザーはお互いにチャットを行うことができます。これはSignalRを使用して実装されています。

この機能は正常に実装されましたが、最後に、アプリケーションが開かれたときにのみSignalRが有効になることがわかりました。アプリケーションがない場合、ユーザーはサービスから何らかの情報を受け取ることができません。

次のステップでは、OneSignal(プッシュ通知サードパーティサービス)について考えています。実装は複雑ではなく、プッシュ通知の送受信に成功しました。

我々が今で直面している問題は次のとおりです。

  • アプリケーションが開いたら、どのように我々はSignalr、正しくOneSignalの両方から送信情報を扱うことができますか?アプリが開くとプッシュ通知を受け取ることは望ましくありませんが、アプリが開いていないときには通知します。

誰でも私たちを助けてくれますか?

あなたは、サーバー側で接続/切断されたユーザーを追跡する必要がある、

答えて

2

、ありがとうございました。 ユーザーが接続されている場合は、signalrメッセージを送信します。ユーザーが接続されていない場合は、プッシュ通知を送信します。

しかし、SignalRとのユーザ接続/切断を追跡するのは簡単ではありません。なぜなら、クライアントが停止してから(つまり、アプリケーションを終了する、ネットワーク障害など)、実際にサーバがクライアントが切断されたと考えます。私が正しいとすれば、それは20秒になるかもしれない。これは、SignalRが断念する前に同じConnectionIdを使用して20秒間再確認しようとするためです。

もう1つの可能な解決策

はsignalrとプッシュ通知の両方ですべての単一のメッセージを送信します。 (各サーバー上で生成された)各メッセージペイロードにuidプロパティを設定します。 クライアントはメッセージを表示し、そのuidをローカルデータベースに追加します。 クライアントが同じuid(プッシュ通知またはSignalrのいずれかの方法)で別のメッセージを取得すると、そのメッセージは破棄されます。

私はこれをチャットアプリケーションで行いました。これはかなりうまく動作します。唯一の問題は、アプリが接続されているときにプッシュ通知を無駄にすることですが、プッシュ通知サービスは安価です...そして、私は、SignalRメッセージがプッシュ通知よりもずっと速く到着すると確信しています。

+0

実際、OneSignalサービスは無料です。したがって、私は多くの価格設定については気にしません。唯一のことは、サーバーがプッシュ通知とシグナルメッセージを同時に送信する必要があるため、サーバーのパフォーマンスです。 – Redplane

+0

1分に数百または数千のメッセージを送信する場合は、正しいかもしれません。これはテストされるべきことです。しかし、もしあなたがそのような巨大なワークロードを持つことを計画しているなら、私は分散アーキテクチャとバックペインを実装することを提案します。 – xleon

関連する問題