オープンソースのJavaライブチャットサーバー



今日、オンラインチャット(またはオンラインコンサルタント)は多くのサイトで行われています。 誰かが積極的にそれらを使用し、誰かが我慢できず、誰かが時々ジョークを開いています。 独自のチャットサーバーを展開する場合は、オープンソースソリューションのLive Chat Engineについて説明します。


特徴


プロジェクトには、ユーザーとオペレーターの側でチャットを操作するために最低限必要なセットが含まれています。
-チャット自体。
-アクティブなオペレーターがいないときにフィードバックを残す機能。
-そのようなレビューの電子メールアラート。
-チャットごとに複数のオペレーター。
-新しいメッセージに関するオペレーターのブラウザー通知。
-ユーザーのユーザーエージェントとIPを表示します。
-チャットの履歴とレビューを表示します。

悲しいかな、様々なインスタントメッセンジャーとの統合はまだありません。

サイトでチャット:


オペレーターズオフィス:


建築


最初は、プロジェクトを3つの論理部分に分割することが決定されました。
-オペレーターのフロント(チャットフロントサーバー);
-Web APIおよびチャットストレージ(チャットノードサーバー);
-調整サーバー(chat-c​​entral-server)。



このアプローチにより、システムに新しいノードサーバーを追加するだけでアカウントの数を増やすことができます。
もちろん、1つのサイトではこのスキームは冗長になる可能性があるため、将来的には3台のサーバーを1台に簡単に組み立てることを考えるかもしれません。

動作モード


チャットエンジンは既存のシステム(ツールモード)に統合できます。管理者がアカウントを開始すると、フロントは独自のオペレーターのみがアクセスでき、ノードサーバーはサイトブラウザーに対して開かれます。

または、エンジンを独立したサービス(SaaSモード)として起動し、ユーザーがアカウントを作成し、使用するために月額料金が指定されたレートで取得されます...それは簡単ではありません。

実装機能


-サーバーのフロントおよびノー​​ドは、 Tomcat Webサーバー上のWebアプリケーションとして実行されます。
SpringやEJBを使用しません。はい、一般的なスタックなしで大規模なプロジェクトを作成できます。
私はすでにこのアプローチについて一度話しました 。 いずれにせよ、このプロジェクトはホームベースであり、私は多くのことを自分で書きたかったので、お気に入りのフレームワークがないと判断しないでください。

-データベースと通信するために、 MyBatisおよび別の内部クエリテンプレートが使用されます。
間違いなく、MyBatisは複雑なクエリを作成するのに非常に便利ですが、単純で統一されたCRUDには面倒です。
したがって、指定したデータに対するクエリを生成する小さなUniversalQueriesテンプレートエンジンを作成しました。

たとえば、INSERTの説明は次のとおりです。

public class CreateUser extends CreateRow { public CreateUser(User user) { //   "users" super("users", // ,    //    : , ,   .. new Id(user.id), new Login(user.login), new Email(user.email), new PswHash(user.pswHash), new ActivationStateDate(user.activationStateDate), new ActivationCode(user.activationCode)); } } 

そして、条件付きのSELECT:

 public class GetAllBlockedUsers extends SelectRows<User>{ public GetAllBlockedUsers() { //    users super("users", //    User User.class, //    new UserFields(), //  WHERE new AndCondition( new AccsBlocked(true) )); } } 

さまざまな呼び出しの例を次に示します。

 //INSERT universal.update(new CreateUser(user)); //SELECT List<User> users = universal.select(new GetAllBlockedUsers()); //UPDATE -      universal.update(new UpdateUserById(id, new StatusCode(ACTIVATED), new ActivationStateDate(new Date()), new ActivationCode(null))); 

その結果、すべての複雑なクエリは、このテンプレートエンジンを介して、すべてのルーチンであるxml MyBatisで記述されます。

-演算子のフロントはjQueryとともにJsで書かれています。

まとめ


このようなプロジェクトの実装には、週末の約6か月かかりました。
このプロジェクトが、教育の観点からも実用的な観点からも興味深いものになることを願っています。

ご清聴ありがとうございました!

[ Githubへのリンク ]

Source: https://habr.com/ru/post/J264865/


All Articles