LoginSignup
24
19

More than 5 years have passed since last update.

とあるサービスをPHPで作ってみた時の話

Last updated at Posted at 2016-11-03

せっかくなので書き残してみた程度の記事です。ご了承ください。

何を作ったのか

サマーウォーズファンなら何度も見た事があるであろうこのシーンを、Twitterのタイムラインから取得したツイートで再現するものを作ってみました。

CvsmLE5VIAAIkVp.jpg

Github https://github.com/come25136/OZtter
Raspberry Pi b+ で試用公開しています https://oztter.f5.si
OZtterをホスティングしている方が「URL載せていいよー」と言ったので https://oztter.riku6460.space/normal/

[追記] OZtter2作りました
GitHub https://github.com/momizicode/oztter2
こちらはNode.jsで作り直してます https://oztter2.momizi.work

[更に追記]
TwitterがUser Streams APIを廃止したので動きません

[また追記]
Mastodon版作りました
https://bl.ocks.org/come25136/raw/ef1e8c41ac87cc70a7b873539691782e/

なぜ作ったのか

暇だったから
サマーウォーズの世界観を味わってみたかったから。

PHPで何をどう実装したのか

サーバーからクライアントへのデータ受け渡し方法はSSE(Server-Sent Events)を採用しました。

なぜWebSocketではなくSSEを採用したのか

クライアントからサーバーへデータを送る必要がなかったから。
PHPでWebSocketが扱いにくいとか決してそういう訳ではない

Nginx側のバッファ処理でハマった

header("X-Accel-Buffering: no");

この一行で解決しました。

Twitter OAuth認証はどうしたの?

@mpyw 氏作の cowitter を使わせて頂きました。

サーバー側ではどのような処理をしているのか

Twitter Streaming API で取得したユーザータイムラインをSSEを使ってクライアントへリレーしているだけです。
https://github.com/come25136/OZtter/blob/master/push.php

なぜサーバーが必要なのか

Twitter API Key が漏れる心配がないからです。

完全に心配がないとは言い切れませんが、クライアントのみでTwitter Streaming APIを使用した場合、JavaScriptに直接API Keyを埋め込む必要があるので、API Keyが漏れる可能性が高くなります。というか漏れます。

サーバー側の負荷について

負荷は同時クライアント接続数に比例します。

が、今回はコネクションが常に繋がっている状態なので、普通の負荷と思って考えると予想を超えます。

Raspberry Piにとっては地獄ですね (;´∀`)

最後に

PHPはいいぞ

とか言うと他の言語を使っている人に怒られる戦争を仕掛けられるので、あまり大声では言えませんが(笑)

[追記]この記事を書いてから1年経ったので一言

最近はJS触りながらロリコン発言しています。

24
19
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
24
19