私はJavaを使用してバックエンドサービスを実装しています。 Singleton
パターンを適用することを選択したのは、1つのサービスしか実行していないためです。ただし、このサービスはSocket.IOクライアントでもあるため、サーバーがプッシュしたときに何らかのイベントが発生する必要があります。しかし、イベントはキューにある必要があります。デザインパターン:Javaのシングルトンパターンで同期メソッドまたはブロックを作成する方法は?
私の実装は正しくないと思います。ちょうどsynchronized(this)
ブロックがBackend
オブジェクトを保護しているのではなく、Emitter.Listener
オブジェクトを保護しているようです。あなたが引用されたラインで
private static synchronized BackendServer getInstance()
{
if(instance == null) {
instance = new BackendServer();
try {
socket = IO.socket(host_name+":"+port_frontend);
socket.on(Socket.EVENT_CONNECT, new Emitter.Listener() {
@Override
public void call(Object... args) {
}
}).on("event1", new Emitter.Listener() {
@Override
public void call(Object... args) {
try {
synchronized(this) { <--Which object is synchronized?
String timestamp = getCurrentTime();
String logging = "["+timestamp+"] ";
'BackendServer'のインスタンスメソッドでソケットを作成するべきではありませんか?サーバの場合は、スタイル通りにソケットを作成しないでください。 – RealSkeptic