新月プロトコルのPHP実装
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
css
data
img
js
tests
.gitignore
.travis.yml
README.md
Shingetsu_Client.php
Shingetsu_Server.php
client.php
config.php
favicon.ico
gateway.php
index.php
server.php
storage.php
thread.php

README.md

sgphp

sgphpとは、新月のPHP実装です。sakuは実装が不必要に複雑で、いじるのが面倒くさかったのでPHPでつくり直す事にした。 まともな実装がsaku以外にないのもよくない。 プロトコルドキュメントが本当に最低限で、アプリケーションの実装方法にまで踏み込んでいないので、そのあたりも改善できれば。

特徴

  • レンタルサーバーで動く
  • プロセス常駐しない

インストール方法

ソース一式をルートディレクトリに配置。 dataディレクトリを777に。 server.phpにアクセスすると、data/nodelist.txtが作られる。必要なら手でサーバを追加。 client.phpにある、crawl()を動かすと、他ノードから最新5件のデータを持ってこれる。 client.phpを適当にいじってjoinしないと他ノードがアクセスしてくれないよ。

TODO

まだできていないのでこれからやっていく事

  • スレッド表示系
  • 投稿機能
  • 署名関連
  • タグ関連
  • gzipサポート
  • Server::join()でのホスト名省略時gethostbyaddr()

Memo

  • 置くだけで使えるようにしたい。プロセス常駐させたくない。cronはなるべく使いたくない。レンタルサーバでも動くように。
  • でかいファイルの読み込みはmemory_limitで落としてるけど、fopen() & fgets() である程度はカバーできるかもしれない。
  • 全部GETでやるのは大変おもしろい。file_get_contents()が大活躍。
  • /joinの後、他ノードからよくやってくる通知は、/have,/update。
  • /recent/時刻 の時刻は、いつにするべきか。前回recent時の時間を覚えておく?
  • sakuの場合、投稿されると、gateway.pyのrec.build()で投稿をつくり、UpdateQueueを動かすようだ。
  • 画像が添付されてるクソ重いレコードをどう扱うか。/haveとか/headで容量を取得できないものか。添付ファイルが存在するレコードは無視するという方法がかなり良さそう。
  • ファイルは、無限個のレコードを格納できるので、システム側できるようにする。

mysqlを使うとした場合のTable構成

プロトコルに書かれている「ファイル」と「レコード」の話をみていると、RDBMSで運用するべきに見える。mysqlで運用する場合のTable構成を考える。

  • file

  • id(スレタイのmd5)

  • timestamp

  • title

  • record

  • id(bodyのmd5)

  • timestamp

  • body