ひとり言

listenイベントの最大数

 
Picture of yin chang (infrared Razor)
listenイベントの最大数
by yin chang (infrared Razor) - Tuesday, 6 October 2015, 1:15 AM
 

前にスカイランタン(空飛ぶ行灯)を作っていたのをイベントで一度にたくさん飛ばそうと言うことになり、タッチで飛ぶ仕組みだったものを裏チャットで飛ぶように改造していました。

飛行部分はwebで拾ってきた風船のスクリで、いろいろググったりスクリプタさんに聞いたりしながら作ってたんですが…

自分のsimで試したところ、数十個rezしてシャウトで飛ばしてみると、6個くらいしか飛びませんw

そこでさらに調べてみるとllListenはずっと待機状態だとけっこう重いんだと書いてあるサイトを見つけ、これはもしかしたらとlistenしたらすぐにllListenRemoveするようにしました。

いやスクリ書いてる方には常識なのかもしれませんが^^;;

それでもう一度テストすると数十個ちゃんと飛んでくれました。

一斉に飛んじゃうとあっというまに終わっちゃうので、listenしたあとランダムに時間を置いて飛ぶように改造し、会場である島上で四百数十個rezしテストしたところ全部飛んでくれました。

ただこれだけの数が物理になるとかなり重く、物理FPSが一時的にひと桁にww

それでもトラブルなく終わったので再度タイマーの数値を変え、今度は600個以上でテストしたところ…今度は100個以上残ってしまいました。

残った子たちにチャットコマンド与えても反応しないところを見ると、listenイベントは起こりListenRemoveされているようです。それでも飛ばないところを見るとその後の物理化のユーザ関数呼び出しに失敗したのかな??

タッチしたところ、タッチイベントは発生し飛んでくれました。

不思議だったのは、listenで飛ばなかった子たちはスクリプトをリセットしてもチャットコマンドを受け付けてくれなかったことです。

新しくrezしたものは普通にチャットコマンドで飛んだので、sim側がお腹いっぱいでlisten受け付けないとかじゃなかったようです。

ま、本番は500個以下でやりましょうw

Picture of Iseki Fumikazu
Re: listenイベントの最大数
by Iseki Fumikazu - Tuesday, 6 October 2015, 3:10 PM
 

有益な情報ありがとうございます.

確認ですが,これは OpenSimでの話でしょうか,それともSLですか?

OpenSim の場合は OpenSim.ini の [XEngine] の所でいろいろ数字を変えて試してみると面白いかもしれません.

MaxScriptEventQueue などの設定もあります(デフォルトは300)

(yinさん以外の方でも) もし時間がおありなら JOG_TEST2 あたりで色々実験しても良いですよ.
パラメータ変更のリクエストにも応じます.

ただし,実験データはくださいね smile

Picture of yin chang (infrared Razor)
Re: listenイベントの最大数
by yin chang (infrared Razor) - Tuesday, 6 October 2015, 10:52 PM
 

JOG内での実験でした。

私はビューワからの操作しかできないので、物理FPS等もビューワ表示の数値です^^;

Picture of Iseki Fumikazu
Re: listenイベントの最大数
by Iseki Fumikazu - Tuesday, 6 October 2015, 11:15 PM
 

>> JOG内での実験でした。

わかりました.ありがとうございます.

>> 私はビューワからの操作しかできないので、物理FPS等もビューワ表示の数値です^^;

実はサーバのFPS もOpenSimDefault.ini のデフォルトではかなり抑えられた数値になっています.
これを上げたらどうなるかもその内やってみたいです.

OpenSimDefault.ini 内のコメントも微妙なので... (^_^;

    ; The minimum proportion of a second that any particular frame can take to execute.
    ; Only change this if you really know what you're doing, and be prepared to change UpdatePhysicsEveryNFrames
    ; (and other Frames params) to match!  For instance, halving MinFrameTime to 0.0445 require
    ; UpdatePhysicsEveryNFrames = 2 unless you don't mind your avatar walking like Benny Hill.
    MinFrameTime = 0.089

Benny Hill の歩き方って,どんなのでしょう (^_^;

MinFrameTime = 0.089 で大体 1/0.089 = 11.2 FPS くらいです.

 

Picture of yin chang (infrared Razor)
Re: listenイベントの最大数
by yin chang (infrared Razor) - Sunday, 11 October 2015, 4:44 PM
 

>Benny Hill の歩き方って,どんなのでしょう (^_^;

Benny Hill walkでYoutube検索してみたところ、フィルムを早回ししたような動きのことを言うようですね^^;

シノバー
Re: listenイベントの最大数
by Shinobar Martinek - Tuesday, 6 October 2015, 8:46 PM
 

> listenしたらすぐにllListenRemoveするようにしました。

そうですね。コマンドを1回限り聞くケースではそのようにします。

あと、時間制限を設けて、コマンドが一向に来ないときは一定時間後に強制的に llListenRemoveするのが無難です。

個別の状況でいろんな手法が考えられます。一般的な話として、タイムリミットを設けるやり方を紹介しました。

Picture of yin chang (infrared Razor)
Re: listenイベントの最大数
by yin chang (infrared Razor) - Tuesday, 6 October 2015, 10:54 PM
 

>あと、時間制限を設けて、コマンドが一向に来ないときは一定時間後に強制的に llListenRemoveするのが無難です。

なるほど、そうですね。それも追加してみます。