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