サイトがイベントを投稿する方法...

むかしむかし(いつ頃か覚えていませんが、ずっと前に)私は自分でウェブサイトをまとめて立ち上げました。 最初は、単に誰かに渡す必要があるものの倉庫として使用されていました。 その後、偶然、自由時間が形成され、サイトに有意義で有用な何かを埋めることができました。 そして、私は本当にサイトで行われているイベントに遅れないようにしたかった。 最も簡単な解決策は、行われた手紙を送ることです。 ただし、日中のオフィスのメールの流れが合理的な制限を超えているため、しばらくしてサイトからメールを削除したいという要望がありました。



そして、サイトイベントを配信するためのトランスポートとしてメールを使用することは一般的なアプローチの1つに過ぎないという考えに至りましたが、メッセージをほぼ瞬時に送信できるだけでなく、受信者のステータスを追跡し、イベントの配信を保証できるトランスポートもあります。 これらのトランスポートの1つはジャバーです。



実装に突入する前の少しの推論。



そのため、現時点では、サーバーはいつでも私に手紙を送ってきました。

  1. サイトから送信できる提案/コメント
  2. サイトからのファイルのダウンロードに関する情報
  3. 定期的に小さな統計


これらのイベントのすべてをいつでも配信する必要はありませんでした。「今すぐ誰かがサイトからファイルを取得している」という事実として、サイトからファイルをダウンロードすることに関する情報が必要です。 リクエストに応じて統計情報を取得する方が興味深いでしょう(はい、ページを作成できますが、そのようなページは通常モンスターになりますが、要約のようなものを見る必要があります)。 したがって、イベントの送信は次のようになります。

  1. サイトから送信できる提案/コメント - 常に送信
  2. サイトからのファイルのダウンロードに関する情報 - オンラインの場合にのみ送信されます
  3. 定期的に小さな統計 - 私がそれを見たかったとき


ちなみに、IMクライアントは自動的に起動し、メールクライアントよりもはるかに早く起動します。 サイトイベント



準備作業。



はじめに、サイトが機能するためのジャバーIDを取得しました。 承認リクエストに対するサイトのサポートを気にしませんでした。連絡先と承認を手動で追加するために必要なすべてのステップを実行しました。 これは単なる実験です。 将来、登録ユーザーをサーバーの連絡先リストにバインドする必要があります。

2番目に重要なことは、jabberプロトコルを操作するためのライブラリの選択です。 ネットワーク上の.NETには十分な数のプロジェクトがありましたが、特定のライブラリの最終的な選択はまだ行っていません。 比較を続けます。



クライアントをjabberサイトから作成します。



実装の準備がすべて整い、最初に書かれたコードはジャバーサーバーにログインし、サイトの開始時にオンライン連絡先に表示されました。 実験を中止すると脅した最初の問題:何らかの理由で、一部の図書館は、ユーザーに確認を求める義務があると考えています。 当然、サイトは彼らに何も答えることができず、単純なウィンドウを作成することもできませんでした。 プロトコルを操作するためにライブラリを単純に交換した後、待望の碑文「[Server] On-Line」を見つけました。その後、興奮しました-この問題はまったく別のライブラリで私に会いました。



イベントの送信を開始します。



実際、開発全体はvoid SendMessageメソッド(Jid to、bool alwayssend、文字列形式、paramsオブジェクト[] args)記述し、このメソッドを呼び出すことで構成されていました。 また、自動応答のための小さなメソッドを作成しました。

protected void processMessage(Jid jid, string text) { string cmd = new Regex( "\\s+" , RegexOptions.ECMAScript).Replace(text, " " ).ToLower(); switch (cmd) { case "?" : SendMessage(jid, false , ":\n" + " ? - \n" + "? - IP \n" + "? - \n" + " ? - ." ); break ; case " ?" : SendMessage(jid, false , Collector.GetSummary()); break ; case "?" : SendMessage(jid, false , Collector.GetIPs()); break ; case "?" : SendMessage(jid, false , Collector.GetPages()); break ; case " ?" : SendMessage(jid, false , Collector.GetServers()); break ; } } * This source code was highlighted with Source Code Highlighter .



  1. protected void processMessage(Jid jid, string text) { string cmd = new Regex( "\\s+" , RegexOptions.ECMAScript).Replace(text, " " ).ToLower(); switch (cmd) { case "?" : SendMessage(jid, false , ":\n" + " ? - \n" + "? - IP \n" + "? - \n" + " ? - ." ); break ; case " ?" : SendMessage(jid, false , Collector.GetSummary()); break ; case "?" : SendMessage(jid, false , Collector.GetIPs()); break ; case "?" : SendMessage(jid, false , Collector.GetPages()); break ; case " ?" : SendMessage(jid, false , Collector.GetServers()); break ; } } * This source code was highlighted with Source Code Highlighter .



  2. protected void processMessage(Jid jid, string text) { string cmd = new Regex( "\\s+" , RegexOptions.ECMAScript).Replace(text, " " ).ToLower(); switch (cmd) { case "?" : SendMessage(jid, false , ":\n" + " ? - \n" + "? - IP \n" + "? - \n" + " ? - ." ); break ; case " ?" : SendMessage(jid, false , Collector.GetSummary()); break ; case "?" : SendMessage(jid, false , Collector.GetIPs()); break ; case "?" : SendMessage(jid, false , Collector.GetPages()); break ; case " ?" : SendMessage(jid, false , Collector.GetServers()); break ; } } * This source code was highlighted with Source Code Highlighter .



  3. protected void processMessage(Jid jid, string text) { string cmd = new Regex( "\\s+" , RegexOptions.ECMAScript).Replace(text, " " ).ToLower(); switch (cmd) { case "?" : SendMessage(jid, false , ":\n" + " ? - \n" + "? - IP \n" + "? - \n" + " ? - ." ); break ; case " ?" : SendMessage(jid, false , Collector.GetSummary()); break ; case "?" : SendMessage(jid, false , Collector.GetIPs()); break ; case "?" : SendMessage(jid, false , Collector.GetPages()); break ; case " ?" : SendMessage(jid, false , Collector.GetServers()); break ; } } * This source code was highlighted with Source Code Highlighter .



  4. protected void processMessage(Jid jid, string text) { string cmd = new Regex( "\\s+" , RegexOptions.ECMAScript).Replace(text, " " ).ToLower(); switch (cmd) { case "?" : SendMessage(jid, false , ":\n" + " ? - \n" + "? - IP \n" + "? - \n" + " ? - ." ); break ; case " ?" : SendMessage(jid, false , Collector.GetSummary()); break ; case "?" : SendMessage(jid, false , Collector.GetIPs()); break ; case "?" : SendMessage(jid, false , Collector.GetPages()); break ; case " ?" : SendMessage(jid, false , Collector.GetServers()); break ; } } * This source code was highlighted with Source Code Highlighter .



  5. protected void processMessage(Jid jid, string text) { string cmd = new Regex( "\\s+" , RegexOptions.ECMAScript).Replace(text, " " ).ToLower(); switch (cmd) { case "?" : SendMessage(jid, false , ":\n" + " ? - \n" + "? - IP \n" + "? - \n" + " ? - ." ); break ; case " ?" : SendMessage(jid, false , Collector.GetSummary()); break ; case "?" : SendMessage(jid, false , Collector.GetIPs()); break ; case "?" : SendMessage(jid, false , Collector.GetPages()); break ; case " ?" : SendMessage(jid, false , Collector.GetServers()); break ; } } * This source code was highlighted with Source Code Highlighter .



  6. protected void processMessage(Jid jid, string text) { string cmd = new Regex( "\\s+" , RegexOptions.ECMAScript).Replace(text, " " ).ToLower(); switch (cmd) { case "?" : SendMessage(jid, false , ":\n" + " ? - \n" + "? - IP \n" + "? - \n" + " ? - ." ); break ; case " ?" : SendMessage(jid, false , Collector.GetSummary()); break ; case "?" : SendMessage(jid, false , Collector.GetIPs()); break ; case "?" : SendMessage(jid, false , Collector.GetPages()); break ; case " ?" : SendMessage(jid, false , Collector.GetServers()); break ; } } * This source code was highlighted with Source Code Highlighter .



  7. protected void processMessage(Jid jid, string text) { string cmd = new Regex( "\\s+" , RegexOptions.ECMAScript).Replace(text, " " ).ToLower(); switch (cmd) { case "?" : SendMessage(jid, false , ":\n" + " ? - \n" + "? - IP \n" + "? - \n" + " ? - ." ); break ; case " ?" : SendMessage(jid, false , Collector.GetSummary()); break ; case "?" : SendMessage(jid, false , Collector.GetIPs()); break ; case "?" : SendMessage(jid, false , Collector.GetPages()); break ; case " ?" : SendMessage(jid, false , Collector.GetServers()); break ; } } * This source code was highlighted with Source Code Highlighter .



  8. protected void processMessage(Jid jid, string text) { string cmd = new Regex( "\\s+" , RegexOptions.ECMAScript).Replace(text, " " ).ToLower(); switch (cmd) { case "?" : SendMessage(jid, false , ":\n" + " ? - \n" + "? - IP \n" + "? - \n" + " ? - ." ); break ; case " ?" : SendMessage(jid, false , Collector.GetSummary()); break ; case "?" : SendMessage(jid, false , Collector.GetIPs()); break ; case "?" : SendMessage(jid, false , Collector.GetPages()); break ; case " ?" : SendMessage(jid, false , Collector.GetServers()); break ; } } * This source code was highlighted with Source Code Highlighter .



  9. protected void processMessage(Jid jid, string text) { string cmd = new Regex( "\\s+" , RegexOptions.ECMAScript).Replace(text, " " ).ToLower(); switch (cmd) { case "?" : SendMessage(jid, false , ":\n" + " ? - \n" + "? - IP \n" + "? - \n" + " ? - ." ); break ; case " ?" : SendMessage(jid, false , Collector.GetSummary()); break ; case "?" : SendMessage(jid, false , Collector.GetIPs()); break ; case "?" : SendMessage(jid, false , Collector.GetPages()); break ; case " ?" : SendMessage(jid, false , Collector.GetServers()); break ; } } * This source code was highlighted with Source Code Highlighter .



  10. protected void processMessage(Jid jid, string text) { string cmd = new Regex( "\\s+" , RegexOptions.ECMAScript).Replace(text, " " ).ToLower(); switch (cmd) { case "?" : SendMessage(jid, false , ":\n" + " ? - \n" + "? - IP \n" + "? - \n" + " ? - ." ); break ; case " ?" : SendMessage(jid, false , Collector.GetSummary()); break ; case "?" : SendMessage(jid, false , Collector.GetIPs()); break ; case "?" : SendMessage(jid, false , Collector.GetPages()); break ; case " ?" : SendMessage(jid, false , Collector.GetServers()); break ; } } * This source code was highlighted with Source Code Highlighter .



  11. protected void processMessage(Jid jid, string text) { string cmd = new Regex( "\\s+" , RegexOptions.ECMAScript).Replace(text, " " ).ToLower(); switch (cmd) { case "?" : SendMessage(jid, false , ":\n" + " ? - \n" + "? - IP \n" + "? - \n" + " ? - ." ); break ; case " ?" : SendMessage(jid, false , Collector.GetSummary()); break ; case "?" : SendMessage(jid, false , Collector.GetIPs()); break ; case "?" : SendMessage(jid, false , Collector.GetPages()); break ; case " ?" : SendMessage(jid, false , Collector.GetServers()); break ; } } * This source code was highlighted with Source Code Highlighter .



  12. protected void processMessage(Jid jid, string text) { string cmd = new Regex( "\\s+" , RegexOptions.ECMAScript).Replace(text, " " ).ToLower(); switch (cmd) { case "?" : SendMessage(jid, false , ":\n" + " ? - \n" + "? - IP \n" + "? - \n" + " ? - ." ); break ; case " ?" : SendMessage(jid, false , Collector.GetSummary()); break ; case "?" : SendMessage(jid, false , Collector.GetIPs()); break ; case "?" : SendMessage(jid, false , Collector.GetPages()); break ; case " ?" : SendMessage(jid, false , Collector.GetServers()); break ; } } * This source code was highlighted with Source Code Highlighter .



  13. protected void processMessage(Jid jid, string text) { string cmd = new Regex( "\\s+" , RegexOptions.ECMAScript).Replace(text, " " ).ToLower(); switch (cmd) { case "?" : SendMessage(jid, false , ":\n" + " ? - \n" + "? - IP \n" + "? - \n" + " ? - ." ); break ; case " ?" : SendMessage(jid, false , Collector.GetSummary()); break ; case "?" : SendMessage(jid, false , Collector.GetIPs()); break ; case "?" : SendMessage(jid, false , Collector.GetPages()); break ; case " ?" : SendMessage(jid, false , Collector.GetServers()); break ; } } * This source code was highlighted with Source Code Highlighter .



  14. protected void processMessage(Jid jid, string text) { string cmd = new Regex( "\\s+" , RegexOptions.ECMAScript).Replace(text, " " ).ToLower(); switch (cmd) { case "?" : SendMessage(jid, false , ":\n" + " ? - \n" + "? - IP \n" + "? - \n" + " ? - ." ); break ; case " ?" : SendMessage(jid, false , Collector.GetSummary()); break ; case "?" : SendMessage(jid, false , Collector.GetIPs()); break ; case "?" : SendMessage(jid, false , Collector.GetPages()); break ; case " ?" : SendMessage(jid, false , Collector.GetServers()); break ; } } * This source code was highlighted with Source Code Highlighter .



  15. protected void processMessage(Jid jid, string text) { string cmd = new Regex( "\\s+" , RegexOptions.ECMAScript).Replace(text, " " ).ToLower(); switch (cmd) { case "?" : SendMessage(jid, false , ":\n" + " ? - \n" + "? - IP \n" + "? - \n" + " ? - ." ); break ; case " ?" : SendMessage(jid, false , Collector.GetSummary()); break ; case "?" : SendMessage(jid, false , Collector.GetIPs()); break ; case "?" : SendMessage(jid, false , Collector.GetPages()); break ; case " ?" : SendMessage(jid, false , Collector.GetServers()); break ; } } * This source code was highlighted with Source Code Highlighter .



  16. protected void processMessage(Jid jid, string text) { string cmd = new Regex( "\\s+" , RegexOptions.ECMAScript).Replace(text, " " ).ToLower(); switch (cmd) { case "?" : SendMessage(jid, false , ":\n" + " ? - \n" + "? - IP \n" + "? - \n" + " ? - ." ); break ; case " ?" : SendMessage(jid, false , Collector.GetSummary()); break ; case "?" : SendMessage(jid, false , Collector.GetIPs()); break ; case "?" : SendMessage(jid, false , Collector.GetPages()); break ; case " ?" : SendMessage(jid, false , Collector.GetServers()); break ; } } * This source code was highlighted with Source Code Highlighter .



  17. protected void processMessage(Jid jid, string text) { string cmd = new Regex( "\\s+" , RegexOptions.ECMAScript).Replace(text, " " ).ToLower(); switch (cmd) { case "?" : SendMessage(jid, false , ":\n" + " ? - \n" + "? - IP \n" + "? - \n" + " ? - ." ); break ; case " ?" : SendMessage(jid, false , Collector.GetSummary()); break ; case "?" : SendMessage(jid, false , Collector.GetIPs()); break ; case "?" : SendMessage(jid, false , Collector.GetPages()); break ; case " ?" : SendMessage(jid, false , Collector.GetServers()); break ; } } * This source code was highlighted with Source Code Highlighter .



  18. protected void processMessage(Jid jid, string text) { string cmd = new Regex( "\\s+" , RegexOptions.ECMAScript).Replace(text, " " ).ToLower(); switch (cmd) { case "?" : SendMessage(jid, false , ":\n" + " ? - \n" + "? - IP \n" + "? - \n" + " ? - ." ); break ; case " ?" : SendMessage(jid, false , Collector.GetSummary()); break ; case "?" : SendMessage(jid, false , Collector.GetIPs()); break ; case "?" : SendMessage(jid, false , Collector.GetPages()); break ; case " ?" : SendMessage(jid, false , Collector.GetServers()); break ; } } * This source code was highlighted with Source Code Highlighter .



  19. protected void processMessage(Jid jid, string text) { string cmd = new Regex( "\\s+" , RegexOptions.ECMAScript).Replace(text, " " ).ToLower(); switch (cmd) { case "?" : SendMessage(jid, false , ":\n" + " ? - \n" + "? - IP \n" + "? - \n" + " ? - ." ); break ; case " ?" : SendMessage(jid, false , Collector.GetSummary()); break ; case "?" : SendMessage(jid, false , Collector.GetIPs()); break ; case "?" : SendMessage(jid, false , Collector.GetPages()); break ; case " ?" : SendMessage(jid, false , Collector.GetServers()); break ; } } * This source code was highlighted with Source Code Highlighter .



  20. protected void processMessage(Jid jid, string text) { string cmd = new Regex( "\\s+" , RegexOptions.ECMAScript).Replace(text, " " ).ToLower(); switch (cmd) { case "?" : SendMessage(jid, false , ":\n" + " ? - \n" + "? - IP \n" + "? - \n" + " ? - ." ); break ; case " ?" : SendMessage(jid, false , Collector.GetSummary()); break ; case "?" : SendMessage(jid, false , Collector.GetIPs()); break ; case "?" : SendMessage(jid, false , Collector.GetPages()); break ; case " ?" : SendMessage(jid, false , Collector.GetServers()); break ; } } * This source code was highlighted with Source Code Highlighter .



  21. protected void processMessage(Jid jid, string text) { string cmd = new Regex( "\\s+" , RegexOptions.ECMAScript).Replace(text, " " ).ToLower(); switch (cmd) { case "?" : SendMessage(jid, false , ":\n" + " ? - \n" + "? - IP \n" + "? - \n" + " ? - ." ); break ; case " ?" : SendMessage(jid, false , Collector.GetSummary()); break ; case "?" : SendMessage(jid, false , Collector.GetIPs()); break ; case "?" : SendMessage(jid, false , Collector.GetPages()); break ; case " ?" : SendMessage(jid, false , Collector.GetServers()); break ; } } * This source code was highlighted with Source Code Highlighter .



  22. protected void processMessage(Jid jid, string text) { string cmd = new Regex( "\\s+" , RegexOptions.ECMAScript).Replace(text, " " ).ToLower(); switch (cmd) { case "?" : SendMessage(jid, false , ":\n" + " ? - \n" + "? - IP \n" + "? - \n" + " ? - ." ); break ; case " ?" : SendMessage(jid, false , Collector.GetSummary()); break ; case "?" : SendMessage(jid, false , Collector.GetIPs()); break ; case "?" : SendMessage(jid, false , Collector.GetPages()); break ; case " ?" : SendMessage(jid, false , Collector.GetServers()); break ; } } * This source code was highlighted with Source Code Highlighter .



  23. protected void processMessage(Jid jid, string text) { string cmd = new Regex( "\\s+" , RegexOptions.ECMAScript).Replace(text, " " ).ToLower(); switch (cmd) { case "?" : SendMessage(jid, false , ":\n" + " ? - \n" + "? - IP \n" + "? - \n" + " ? - ." ); break ; case " ?" : SendMessage(jid, false , Collector.GetSummary()); break ; case "?" : SendMessage(jid, false , Collector.GetIPs()); break ; case "?" : SendMessage(jid, false , Collector.GetPages()); break ; case " ?" : SendMessage(jid, false , Collector.GetServers()); break ; } } * This source code was highlighted with Source Code Highlighter .



  24. protected void processMessage(Jid jid, string text) { string cmd = new Regex( "\\s+" , RegexOptions.ECMAScript).Replace(text, " " ).ToLower(); switch (cmd) { case "?" : SendMessage(jid, false , ":\n" + " ? - \n" + "? - IP \n" + "? - \n" + " ? - ." ); break ; case " ?" : SendMessage(jid, false , Collector.GetSummary()); break ; case "?" : SendMessage(jid, false , Collector.GetIPs()); break ; case "?" : SendMessage(jid, false , Collector.GetPages()); break ; case " ?" : SendMessage(jid, false , Collector.GetServers()); break ; } } * This source code was highlighted with Source Code Highlighter .



  25. protected void processMessage(Jid jid, string text) { string cmd = new Regex( "\\s+" , RegexOptions.ECMAScript).Replace(text, " " ).ToLower(); switch (cmd) { case "?" : SendMessage(jid, false , ":\n" + " ? - \n" + "? - IP \n" + "? - \n" + " ? - ." ); break ; case " ?" : SendMessage(jid, false , Collector.GetSummary()); break ; case "?" : SendMessage(jid, false , Collector.GetIPs()); break ; case "?" : SendMessage(jid, false , Collector.GetPages()); break ; case " ?" : SendMessage(jid, false , Collector.GetServers()); break ; } } * This source code was highlighted with Source Code Highlighter .



  26. protected void processMessage(Jid jid, string text) { string cmd = new Regex( "\\s+" , RegexOptions.ECMAScript).Replace(text, " " ).ToLower(); switch (cmd) { case "?" : SendMessage(jid, false , ":\n" + " ? - \n" + "? - IP \n" + "? - \n" + " ? - ." ); break ; case " ?" : SendMessage(jid, false , Collector.GetSummary()); break ; case "?" : SendMessage(jid, false , Collector.GetIPs()); break ; case "?" : SendMessage(jid, false , Collector.GetPages()); break ; case " ?" : SendMessage(jid, false , Collector.GetServers()); break ; } } * This source code was highlighted with Source Code Highlighter .



protected void processMessage(Jid jid, string text) { string cmd = new Regex( "\\s+" , RegexOptions.ECMAScript).Replace(text, " " ).ToLower(); switch (cmd) { case "?" : SendMessage(jid, false , ":\n" + " ? - \n" + "? - IP \n" + "? - \n" + " ? - ." ); break ; case " ?" : SendMessage(jid, false , Collector.GetSummary()); break ; case "?" : SendMessage(jid, false , Collector.GetIPs()); break ; case "?" : SendMessage(jid, false , Collector.GetPages()); break ; case " ?" : SendMessage(jid, false , Collector.GetServers()); break ; } } * This source code was highlighted with Source Code Highlighter .





これで、サイトが機能していることがわかり、必要なイベントを送信して質問に答えました。 これは私のサイトでチャットウィンドウがどのように見えるかです:

画像

実際に留守番電話を書くことは難しくありません。



結果。



サイトイベントを配信するためのトランスポートとしてjabberプロトコルを使用するのは便利で複雑ではありません。 あなたはすぐに利点を見ることができます-すべてのイベントはいくつかのタイプに分けられ、接触しているユーザー(この場合は私)の存在と(必要に応じて)私の状態(邪魔しない、忙しいなど)にリンクできます:

「いいね」の必要な文字の数が減り、99%のケースで読まずに削除されました。

一般的に、このようなソリューションの可能性は非常に高いことが判明しました。 たとえば、さらに進むことができます-登録プロセスを根本的に変更します:jabber IDのみを要求し、承認リクエストを送信し、初期データを引き出してパスワードを送信しますが、プロトコルを使用する低い普及率はそれを止めます。

サーバーでのテストメカニズムの実装は134行のコードに収まります。興味がある人はレイアウトできますが、このコードはライブラリに付属の例からほぼ完全に取られています。 結果が気に入っている限り、実験は継続されます。 Ahead-負荷テスト、サイト内の連絡先のリストと多数のアイデアとの緊密な作業。



追加:jabberを操作するためのコンポーネントについて


最初の価値のあるプロジェクトはJabber .NETです。私のドメインのメールとジャバーはGoogle Appsを介して動作するため、主な基準はgoogleの通常の動作であり、接続は問題なく動作します。 いくつかの欠陥がありますが、基本的な機能は非常によく提供されています。 私に合わなかったもの:

  1. System.ComponentModel.Componentからのオブジェクトの継承
  2. 複数のdll
  3. プロジェクトの構造は私には完全に理解不能であり、プロジェクトはあまりにも複雑です




2番目のプロジェクトはagsxmppです。現時点ではそれを使用していますが、ほとんどの場合、ライセンスのために拒否する必要があります。 繰り返しますが、それはグーグルでうまく動作します。ライブラリは最初のものよりも深刻です。



考慮される両方のライブラリには、Windows.Formsのコンポーネントが含まれていますが、最初はシャダーなしではそれらを見ることができません。次に、サーバー上でそれらは不要です。



私が見つけることができる他のすべては、サイトを勉強する段階ですでに脇に流されました。 ただし、優れたJScriptプロジェクトがいくつかあり、それらのいくつかは単純にC#に移植できます。



All Articles