Hello Martin,

Here are code examples (maybe I'm misusing something)

I'm adding WebSocketBehavior to our MainPanel [1]
I'm using following code [2] to send messages to all "room clients" (send
to subset of IWebSocketConnectionRegistry)

To test I'm running 20 chromium browsers with clean and initially empty
temp workspaces (being dropped on each run)

I also have added sort of timing (basic implementation log.warn of the
result of System.currentTimeMillis())

default solution [2] totally blocks UI and logs maximum working
time: 90.966sec

So I did [3] (basically move all sending code to new Thread)
This partially unblock UI and slightly reduces delays (the maximum reported
is 78.373sec)

Next I tried to add custom executor:
WebSocketSettings.Holder.get(this).setSendPayloadExecutor(new Executor() {
@Override
public void run(Runnable command) {
final WebSession ws = WebSession.get();
final RequestCycle rc = RequestCycle.get();
new Thread(() -> {
ThreadContext.setApplication(Application.this);
ThreadContext.setSession(ws);
ThreadContext.setRequestCycle(rc);
command.run();
}).start();
}
});

This totally break everything and all I got it is "CouldNotLockPageException"
exceptions ...

Maybe my code for message sending is invalid?

[1]
https://github.com/apache/openmeetings/blob/4.0.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/MainPanel.java#L133
[2]
https://github.com/apache/openmeetings/blob/4.0.2/openmeetings-core/src/main/java/org/apache/openmeetings/core/util/WebSocketHelper.java#L241
[3]
https://github.com/apache/openmeetings/blob/4.0.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/util/WebSocketHelper.java#L244

On Thu, Mar 15, 2018 at 2:56 PM, Martin Grigorov <mgrigo...@apache.org>
wrote:

> Hi Maxim,
>
> Each WebSocket connection locks only one page instance for the processing
> time.
>
> "20+ simultaneous connects" - I guess this is 20 connections by different
> users, not 20 in the same page instance, right ?
> Because I do not expect 20 different users to interfere to each other.
>
> Martin Grigorov
> Wicket Training and Consulting
> Looking for a remote position with Wicket ? Contact me!
> https://twitter.com/mtgrigorov
>
>
> On Thu, Mar 15, 2018 at 7:58 AM, Maxim Solodovnik <solomax...@gmail.com>
> wrote:
>
> > Hello All,
> >
> > I'm trying to migrate from WebSocketBehavior to WebSocketResource due to
> > huge performance degradation starting 20+ simultaneous connects
> > Right now I see no way to process the messages "per client"
> >
> > Maybe it would be possible to have the power of these 2 approaches?
> > Or maybe there is the way to reduce lock time?
> >
> > I tried to implement
> > multi-threaded WebSocketSettings.Holder.get(
> this).setSendPayloadExecutor,
> > but this leads to lots of CouldNotLockPageException ...
> >
> >
> > On Thu, Mar 1, 2018 at 3:41 PM, Maxim Solodovnik <solomax...@gmail.com>
> > wrote:
> >
> > > Hello Martin,
> > >
> > > Thanks a lot for the answer
> > > I do remember it was discussed, and I do remember WebSocketResource is
> > > more performant,
> > > this is why i thought it would be good to have "resource" for speedy
> > > json and "behavior" for component updates etc.
> > >
> > > This is also mentioned in guide:
> > > https://ci.apache.org/projects/wicket/guide/8.x/
> single.html#_how_to_use
> > >
> > > "Wicket allows one thread at a time to use a page instance to simplify
> > > the usage of the pages in multithreaded enviroment. When a WebSocket
> > > message is sent to a page Wicket needs to acquire the lock to that
> > > page to be able to pass the IWebSocketMessage to the
> > > WebSocketBehavior. This may be problematic when the application needs
> > > to send many messages from the client to the server. For this reason
> > > Wicket provides WebSocketResource"
> > >
> > >
> > >
> > > On Thu, Mar 1, 2018 at 2:04 AM, Martin Grigorov
> > > <martin.grigo...@gmail.com> wrote:
> > > > Hi Maxim,
> > > >
> > > > This has been discussed in the past.
> > > > Please search the archives.
> > > > I see no reason why to have more  than one connection per page.
> > > >
> > > > On Feb 28, 2018 19:44, "Maxim Solodovnik" <solomax...@gmail.com>
> > wrote:
> > > >
> > > >> It seems ConnectionRegistry should also be changed in the case of 2
> or
> > > >> more websockets are opened :(
> > > >> will try with one websocket for now ...
> > > >>
> > > >> sorry for the noise
> > > >>
> > > >> On Thu, Mar 1, 2018 at 12:38 AM, Maxim Solodovnik <
> > solomax...@gmail.com
> > > >
> > > >> wrote:
> > > >> > Hello All,
> > > >> >
> > > >> > As far as I can see from the code
> > > >> > right now it is not possible to have multiple WebSockets on the
> page
> > > >> >
> > > >> > WebSocketResource and WebSocketBehavior
> > > >> >
> > > >> > Maybe it worth to extends API to allow such configuration?
> > > >> > I can create PR :)
> > > >> >
> > > >> > --
> > > >> > WBR
> > > >> > Maxim aka solomax
> > > >>
> > > >>
> > > >>
> > > >> --
> > > >> WBR
> > > >> Maxim aka solomax
> > > >>
> > >
> > >
> > >
> > > --
> > > WBR
> > > Maxim aka solomax
> > >
> >
> >
> >
> > --
> > WBR
> > Maxim aka solomax
> >
>



-- 
WBR
Maxim aka solomax

Reply via email to