многопоточность в red5 - PullRequest
       2

многопоточность в red5

4 голосов
/ 23 февраля 2011

У меня есть работающее приложение red5, и я использую MultiThreadedApplicationAdapter, но многопоточность на самом деле не работает. Вот пример, который я хочу сделать, чтобы несколько клиентов вызывали test () и возвращали без блокировки других клиентов. Однако, что случилось, так это то, что второй клиент должен дождаться завершения первого клиента, а затем выполнить test (). Есть идеи, как заставить это работать? Спасибо.

public class Application extends MultiThreadedApplicationAdapter {

    public void test()
    {
        System.out.println("test "+System.currentTimeMillis());
        try {           
            Thread.sleep(5000);
            } catch (InterruptedException e) {
                e.printStackTrace();
        }
    }   
}

Код на стороне клиента выглядит следующим образом


conn.addEventListener(NetStatusEvent.NET_STATUS, onNetStatus);
conn.connect(server);
conn.call("test",null);

Ответы [ 2 ]

4 голосов
/ 04 августа 2011

Спасибо, что нашли серьезную ошибку в нашей обработке сокетов, она не работала должным образом с последней версией Mina (версия 2.0.4).Я рассмотрю проблему позже, но сейчас это исправлено в ревизии 4270

0 голосов
/ 26 июня 2011

ApplicationAdapter уже имел ScheduleJob для управления многопоточностью.

пример

public boolean connect(IConnection conn, IScope scope, Object[] params) {
        iconn = (IServiceCapableConnection) conn;
        appScope = scope;
        createSharedObject(appScope, "thread", false);
        //updateArray();
        this.addScheduledJob(100, new IScheduledJob() {
            @Override
            public void execute(ISchedulingService jobs0)
                    throws CloneNotSupportedException {
                System.out.println(sendList);
                iconn.invoke("receiveVariable", new Object[] { sendList.toArray() });
                sendList.clear();
                try {
                    Thread.sleep(5000);
                    updateArray();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }

            }
        });
        return true;
    }
...