LoginSignup
5
1

「チャット」の実装について歴史を振り返ってみる

Last updated at Posted at 2023-10-17

1980年代から1990年代にかけてインターネットの普及にともなって「チャットサービス」が広がっていきました。
2023年の今現在でも現役バリバリのツールで、近年ではメールよりも多く使われています。

チャットの開発は多くの課題がありましたが、技術の進化でその課題を乗り越えてきました。
例えば以下のような課題です。

  • 同時接続数の上昇による負荷
  • リアルタイム性

この記事ではチャットのリアルタイム性に対する実装について過去の例と、現在の例について解説します。

実装例

過去の実装例1 - 定期的にサーバーに更新リクエストを送る

最も原始的なやり方です。数秒毎に最新のポストをサーバーへリクエストして取得しにいく方法です。
Ajaxとか仮想DOMとか無かった時代ではページそのものをリロードしてたのではないでしょうか。

const getNewPost = function(){
  location.reload();
};

setInterval(getNewPost, 5000);

この実装では、人数が多い場合のサーバー負荷や、更新が遅いという問題があります。

過去の実装例2 - Comet

ほんのわずかな期間だけ話題にあがったCometです。
Cometはプル型ではなくプッシュ型で更新情報をブラウザに反映させる技術でした。JavaScriptがサーバーとつながりっぱなしにしておく技術です。ロングポーリングと呼ばれていました。
あまりに情報が少なく、記憶からも消えかけてきてるので詳細な実装は割愛します。。。

過去の実装例3 - Websocket

Websocketを利用したリアルタイム通信技術です。

// サーバー側
io.on("connection", (socket) => {
  socket.emit("hello", "world");
});

// クライアント側
socket.on("hello", (message) => {
  console.log(message);
});

HTTPからWebSocketへのプロトコルのアップグレードが必要だったため、ルーターに弾かれるという事もしばしありました。
このWebsocketの登場で、リアルタイム性はかなり向上されました。
しかし、同時接続数が増えてくると1台のサーバーではさばききれなく、スケールアウトが必要になってきます。
データの同期が必要となり、バックエンド側にはRedisのPubSubなどで対応をしてきました。

現在 - PaaSの活用

現在ではSDKとインフラを提供しているサービスが多くあります。
サーバー側の実装は不要で、スケールアウトもすべておまかせする事ができます。
同時接続数の上昇による負荷とリアルタイム性どちらもクリアでき、メンテナンスコストを抑える事が可能です。

Tencent Cloud Chatの紹介

Tencent CloudのChatは、リアルタイムチャットサービスです。Webブラウザやモバイルアプリで利用することができ、1対1のチャットやグループチャットなどの機能を提供しています。

特徴

  • 高可用性:テンセントクラウドのグローバルネットワークを活用することで、高い可用性を実現しています。
  • スケーラビリティ:ユーザー数やメッセージ数に合わせて、柔軟にスケールすることができます。

機能

  • 1対1のチャットやグループチャット
  • Push通信
  • 画像、ボイス、動画、ファイルなどのメッセージを送信
  • スタンプの送信
  • 既読機能
  • グループの作成、メンバーの管理、グループの設定

まとめ

チャットサービスは、コミュニケーションの手段としてだけでなく、ビジネスや教育など、さまざまな分野で活用されています。今後も、チャットサービスのさらなる普及が期待されますが、機能の拡張やスケール等を考慮するとPaaSなどのパッケージ化されたサービスを活用するほうがよさそうです。

最後に

Tencent Cloudに関するお問い合わせはこちらから

5
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1