11838


お世話になります。

PHP+mysqlで、簡単なWebシミュレーションゲーム的なものを  
作ってみようと思っています。

そこで、よく見られるような、一定時間ごとに民が米や鉄を生産して  
増えていくと言ったつくりをしたいのですが、これはどのような仕組みで  
実現しているのかが解りません。

mysql自体に、一定時間に決まった処理をするという機能がついているのか、  
それとも、サーバー側のPHPかその他の言語かなんかで一定時間ごとにSQLを  
走らせているのか。別の言語でそういったプログラムを入れれば簡単そうですが、  
実際はどうなのでしょうか。

少し質問の内容からは逸れてしまいますが、PHP+mysqlが使えるレンタルサーバー  
などでも実現できるのでしょうか。

ここまでのことをするには、自分でサーバーを立てるしか方法がないのでしょうか。

初心者で申し訳ありませんが、ご助言をお願いいたします。


CC BY-SA 3.0
2015-06-29T04:41:02.650
11834
2015-06-29T06:02:29.007
9374
question
php mysql
mysql で一秒ごとにカウントアップさせたい


時間で計算したらダメでしょうかね？

毎度毎度DBに保存させるのではなく、任意のタイミング(消費したりとか、生産数が変わったりとか)で保持させて、次回利用時に時差から増加分を計算して現在の資源数を計算する。

ブラウザ側でリアルタイムに資源が増えていく様子は、ブラウザ内でタイマー使って増やしていくってのはどうでしょう？  
当然、ブラウザ側とサーバ側とでズレは発生すると思うので、何分かおきにでもサーバと同期してやると。このタイミングでサーバ側の資源テーブルを更新してやってもいいですかね。

1秒以内に何度も通信とか、ユーザが増えたりしたら...(((;゜Д゜)))ガクガクブルブル


CC BY-SA 3.0
2015-06-29T05:45:54.997
11838
2015-06-29T05:45:54.997
2383
11834
answer


一定時間ごとに処理を行うのはnode.jsなどを使えば簡単に実現できます。

普通のレンタルサーバーであっても、最近はcronの使えるサーバーが多いと思いますので、cronで一定時間ごとにPHPを実行してみてはいかがでしょうか。

cronの使えないレンタルサーバーでは一定時間ごとの処理は基本的には不可能ですが、「一定時間ごとに民が米や鉄を生産して増えていく」という処理を馬鹿正直に一定時間ごとに実行する必要はありません。  
プレイヤーがアクセスしたタイミングで、今までの生産処理を一気に実行すれば同じことだと思います。


CC BY-SA 3.0
2015-06-29T05:50:18.707
11840
2015-06-29T05:50:18.707
2232
11834
answer


> mysql自体に、一定時間に決まった処理をするという機能

という部分に関してのみの回答になりますが、

[CREATE EVENT 構文](http://dev.mysql.com/doc/refman/5.6/ja/create-
event.html)を使えば実現はできそうです。  
こちらは stored procedure を使う例ですが、参考程度に。  
[How to schedule a stored procedure in
MySQL](https://stackoverflow.com/questions/6560639/how-to-schedule-a-stored-
procedure-in-mysql)

ただ、他の方が回答に記載しているように、  
Webシミュレーションゲーム的なものでRDBを使用して毎秒処理は中々に危険な気がします。


CC BY-SA 3.0
2015-06-29T06:02:29.007
11842
2015-06-29T06:02:29.007
2017-05-23T12:38:55.250
-1
3516
11834
answer