Coder Social home page Coder Social logo

Comments (4)

nkzawa avatar nkzawa commented on August 27, 2024

connect() した時に限らず、内部処理は基本的にある一つのthreadで処理され、Emitter.Listener.call()も基本的にそのthread内で呼び出されます。

これは全て内部的に行われることなので、ライブラリを使用する時に何かに気を付けなければならないということは無いと思います。emit()のために新たにスレッドを作る必要などもありません。
例外としてはイベンドコール(Emitter.Listener.call)が前述のthread内で呼び出されるので、そこから続けてViewを更新する場合は、明示的にAndroidのUIスレッドで行わなければなりません。

上記を踏まえての回答は以下のようになると思います。

・connect()を呼べるスレッドは縛りがありますか?

ありません。

・onEmit()を呼べるスレッドは縛りがありますか?

ありません。(onEmitはonメソッドのことだと思うのでその前提です)

・Emitter.Listener.call()を呼ぶスレッドは何?(UIスレッド? UIスレッド以外のスレッド? onEmit()を呼んだスレッドと関係ある?)

内部的に生成される単一のthreadです。AndroidのUIスレッドや onを呼んだスレッドとは関係ありません。

不明点あれば気軽にきいてください 😃

from socket.io-client-java.

maimuzo avatar maimuzo commented on August 27, 2024

早速の回答ありがとうございます。
なるほど、特に縛りはなかったのですね。

connect()をUIスレッドから呼べなかったのは、自分で書いたラッパー部分が原因でしたので、こちらもUIスレッド以外から接続できることを確認しました。

・onEmit()を呼べるスレッドは縛りがありますか?
ありません。(onEmitはonメソッドのことだと思うのでその前提です)

すいません、こちらもタイポでしたが、emit()できるのは特定のスレッドに縛られますか?という質問でした。
でも、上の回答を見ると、縛られないのでしょうね。

内部的に生成される単一のthread

ということは、Emitter.Listener.call()をきっかけに重い処理などを行うと、次のイベントを受信できない(その分遅れる)ということですよね。
Emitter.Listener.call()をきっかけに統計処理してemit()で返す、というようなことをやっていたので、別スレッド立てたほうが良いかな、でも挙動が安定しないしライブラリ側で何か制限があるのかな、という話でした。

上の質問の回答という意味では納得したのですが、サーバ側では送っているイベントをAndroid側で受信できない問題はクリアできていません。

サーバ側で
DEBUG=socket.io* node myapp
とした時のログを見ていると、クライアント数分送信はしている(client.idなどは表示されないので確信は持てないですが)ように見えるのですが、逆にAndroid側で流れてきたPacketを全てdumpするようなオプションはありますか?

もしくは、ソースのこの辺りにパッチ当てればできそう、的なヒント頂けますか?

from socket.io-client-java.

nkzawa avatar nkzawa commented on August 27, 2024

Emitter.Listener.call()をきっかけに重い処理などを行うと、次のイベントを受信できない(その分遅れる)ということですよね。

その通りです。重い処理は別threadで行ったほうが良いと思います。

dumpのオプションはないですが、Node.jsクライアントと同様のログをjava.util.logging.Loggerで出力しているので、それを見れるように設定する方法があります。
(Androidでは工夫しないと見れないようです)

http://stackoverflow.com/questions/4561345/how-to-configure-java-util-logging-on-android

ソースを変更する場合は、Manager#onpacketか engine.io-clientの方のSocket#onPacketあたりです。

https://github.com/nkzawa/socket.io-client.java/blob/master/src/main/java/com/github/nkzawa/socketio/client/Manager.java#L349
https://github.com/nkzawa/engine.io-client.java/blob/master/src/main/java/com/github/nkzawa/engineio/client/Socket.java#L463

from socket.io-client-java.

maimuzo avatar maimuzo commented on August 27, 2024

サーバ側では送っているイベントをAndroid側で受信できない問題はクリアできていません。

この件ですが、実はiBeaconを読み取って統計処理してWiFi経由でsocket.ioに送る処理を作っていたのですが、Nexus7(2013)はBLEのスキャンとWiFiを同時に使うと不安定になるバグがあって、それが原因だったようです。
(ログを見ても原因がよくわからず時間がかかりました)

WiFi AP側を5GHz帯を使うもの(IEEE 802.11 acなど。ただしNexus7はac未対応なのでIEEE 802.11 nを使用)に変えると安定しました。

この件については解決しましたのでクローズします。
アドバイスありがとうございました。

from socket.io-client-java.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.