Comments (4)
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.
早速の回答ありがとうございます。
なるほど、特に縛りはなかったのですね。
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.
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.
サーバ側では送っているイベントを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)
- socket.io client sometimes sends arrays wrong HOT 5
- can i use multiple socket connection ?
- Android 13 not available HOT 1
- It seems you are trying to reach a Socket.IO server in v2.x with a v3.x client, but they are not compatible HOT 3
- sendBuffer should be accessible
- Getting EVENT_CONNECT_ERROR from Android to Node HOT 1
- Change/update auth or query or extraheaders containing token after connection HOT 1
- Is this project Still Alive? HOT 3
- How to listen to Manager events? (Socket events are working) HOT 2
- Straightforward logging option for Android
- testDecodeError function in Helpers.java error message clean up HOT 2
- Report: ConcurrentModificationException when use AckWithTimout... HOT 2
- Connection state recovery HOT 1
- NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.Object.toString()' on a null object reference HOT 1
- Unable to emit JSON object instead it is emitting Stringified Json in Client Version - 1.0.2 HOT 2
- Implement Connection State Recovery
- it throws java.lang.ClassCastException when sending nested json data. HOT 1
- in the this one the depencies are not dwonloading for me
- Android 14 not compatible with version 2.1.0
- received disconnect event. and socket closed.
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from socket.io-client-java.