mixi engineer blog

*** 引っ越しました。最新の情報はこちら → https://medium.com/mixi-developers *** ミクシィ・グループで、実際に開発に携わっているエンジニア達が執筆している公式ブログです。様々なサービスの開発や運用を行っていく際に得た技術情報から採用情報まで、有益な情報を幅広く取り扱っています。

Perl Oceanとmixiのチャット機能トライアルの紹介

大槻唯が好きすぎて辛いlapis25です.エンジニアブログをはじめて書きます.

この記事では,リアルタイムコミュニケーションフレームワークスイート Perl Oceanの紹介と,Perl Oceanを用いて開発した,mixiのチャット機能のトライアルについて紹介したいと思います.

XMPP

まずは,Perl Oceanのコア技術である,XMPPの概要を軽く説明します.

1990年代後半からYahoo! Messenger,Microsoft LiveやAOL AIMなどさまざまなメッセンジャアプリが開発されていましたが,それらのアプリは独自の仕様によって作られていました.メッセンジャに要求される仕様を標準化するためにJabberが生まれました.Jabberは名前をXMPP(Extensible Messaging And Presence Protocol:拡張可能なメッセージとプレゼンスのプロトコル)と変えて2004年にRFCになりました.

XMPPの特徴としては下記のようなものがあります.

  • オープン標準(プロトコルはRFCとして公開 ⇒ RFCs - The XMPP Standards Foundation
  • XMLベース
  • クライアント・サーバ間の永続的コネクション
  • XMPPのネットワークは中央サーバを持たず,電子メールと同じような構造を持ち,XMPPのサーバ同士は相互にやりとりをしメッセージなどをやりとりを行います
  • RFCでは,コアとなる機能だけが定義されていて,その他の拡張仕様はXEP(XMPP Extension Protocol)として定義されています.その中にはグループチャット・オーディオ・ビデオチャットなどの仕様も含まれます

XMPPプロトコルを採用しているメッセージングのアプリケーション/サービスは,

  • Google Talk
  • Facebook Chat
  • MSN Live
  • iMessage(iChat)

など多数存在します.

Perl Ocean

Perl Oceanは Lyo Kato氏により開発された,XMPPプロトコルを中心とするリアルタイムコミュニケーションフレームワークスイートです.

機能

下記の機能を実現することを目指しています.

  • 一対一のインスタントメッセンジャ
  • プレゼンスサービス
  • グループチャット
  • オーディオチャット・ビデオチャット
  • イベントのプッシュ通知

特徴

Webサービスとのインテグレーションを前提とした設計

現在あるWebサービスに,リアルタイムコミュニケーションをインテグレーションできることを目的としていて,必要の無いオーバスペックな部分や,ユーザの管理などすでにサービスで提供されているであろう機能は削除しています

デファクトスタンダードな拡張を,一通り標準サポートしたフルスタックフレームワーク

拡張機能うちデファクトスタンダードなものや,Webサービスとのインテグレーションにおいて必要と思われるものは最初から組み込んでいます.

ocean-webservice.png

クラスタサポート

大規模な常時接続サービスにおけるスケーリングに必要な,クラスタの機能を標準でサポートします.

WebSocketなどを利用したHTTP Bindingの独自サポート

HTTP Binding(WebSocket/SSE/XHR)を独自にサポートします.クラスタサポートと組み合わせて通常のXMLベースのXMPPと併用することも可能です.

ocean-cluster.png

開発の状況

すべての機能や特徴が,現状実装されているわけではありませんが,日々開発が進められており,GitHub上でオープンソースとして公開・開発されています.スタンドアロンで動くモードも存在するので,実際にXMPPサーバを立ち上げて試してみることも可能です.ここで述べたより詳しい情報もドキュメントとして公開されていますので,もっと深い情報が知りたい方はご参照下さい.

mixiのチャット機能のトライアル

mixi-chat.gif

mixiでは,Perl Oceanを利用したチャット機能のトライアルを行っています.mixiの友人とトークができる機能に限られている上に,実験中であり運用の都合上,サーバが停止することなどもありますが,興味のある方はぜひお試し下さい.また不具合などを見つけられた場合は,ぜひお知らせ下さい

接続に必要な情報はこちらのページをご覧下さい.

さいごに

2012年9月27日から29日の3日間に行われる,Perlのお祭りYAPC Asia 2012で,Perl Oceanについて発表します.もう少しフレームワークの構成などにも踏み込んだ内容で発表する予定なので,興味を持たれた方は,ぜひそちらも聞いて下されば幸いです.