20 users has same pageId == 0, different sessionId, so page instances are different I thought the issue is caused by NoVersionMapper, but this seems to not the case ..... Will continue debugging Any hints/pointers are highly appreciated
On Thu, Mar 15, 2018 at 3:12 PM, Maxim Solodovnik <solomax...@gmail.com> wrote: > 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(t >> his).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 > -- WBR Maxim aka solomax