You are not logged in.
Pages: 1
Hello Guys !
How many Clients can a TSQLHttpServer handle ?
I refer to sample Project31 ?
Thanks
Offline
With current implementation, WebSockets uses one thread per client.
So you would be limited to around 2000 clients, I guess, under Win32, and even higher under Win64 (if the server is compiled as a 64 bit executable).
There is a http.sys-based WebSockets implementation staging, but it is not yet merged with the trunk.
For regular HTTP clients - i.e. not WebSockets - there is a thread pool so there is much less resource used.
A http.sys based HTTP server can handle 10,000 simulated connections without any problem, even under Win32.
Offline
Thanks AB !
How is the best implementation for a purpose of a Server with many Clients ?
I'll tried Project 31 and it works nice.
Do you have a snapshot of code to use regarding the right implemetation on Server and Client, the Client Registers a callback on the Server and then mostly receives some data
http.sys is available from Win 8 up ??
Thanks for your Help
Offline
The best approach is IMHO to use interface-based services, and callbacks defined as interface parameters.
Then our binary websockets protocol, with compression and encryption enabled.
But it is a "Delphi only" approach.
What are your needs?
Offline
Hello AB !
I need a Server what can send to the connected Clients and also the Clients can send to the Server some Information, max 4000 Bytes 1 frame. Low communication traffic. Only whe the Server sends to the Clients over their registerd callbacks maybe there is the load higher.
usage :
1. The Client connects to the Server and Registers a callback like sample 31
2. The Server sends some Information to all connected Clients as a callback, max. Clients should not be limited, up to 2000 and more (as you wrote win 32 is limited)
3. also the Client sends some Information to the Server.
I tried sample 31 and it works fine, but your answer was the resources and the limitied Count of threads, because each Client has it own thread on the Server
I tried also sample 14, but only the Client ask for the interfaced Service and then disconnects, so the Server has no Information where the Client is.
MY question
What is the easiest and best way to archieve 1..3.
What serversocket should I use and what clientsocket.
Best regards
cybertrace
Offline
I have similar needs that server pushes notifications to client:
My clients have a copy of the db locally and posts/takes updates thru HTTP calls to a "http.sys" server central database. My clients needs "push" from server with notification message when other clients updates the central db. (I know that mORMot has built in master/slave replication but I can't use it, because my scenario needs plain SQL exchange and some fine tunning)
I have studied the options since I have the same expectations > 2000 clients all time connected to server to get notifications: (I'm talking about notifications system only):
1. mORMmot websockets is not good since it creates one thread per socket
2. the same with all Indy libraries
3. use a standalone RabbitMQ server (or a message broker server) which easily takes millions of messages and thousands of online clients. This seems the best option, but it's a pity that Delphi doesn't have a client for AMQP protocol for exchanging messages (for STOMP protocol exists, but seems the RabbitMQ who is the "message broker of the moment" has better results with AMQP protocol).
Offline
A regular http.sys server, with all clients polling the server at a regular pace (every second or ever minute), would scale with no problem.
Also try the Master/Slave replication of the framework.
See http://synopse.info/files/html/Synopse% … l#TITL_147
To scale with a lot of clients, a regular http.sys server, with on-demand RecordVersionSynchronizeSlave() from a timer would work just fine.
Do not be afraid by polling.
When the refresh rate is low (some seconds), it scales pretty well.
Offline
Thanks emk for your Information
I checked out the RabbitMQ and there is an existing Delphi Software available named kbmMW (Kim Bo Maddsen) which has also in the professional Version an AMQP protocol, look at
http://www.blaisepascal.eu/blaisepascal … ge0020.pdf
This Autor also wrote the kbmMemtable, a very good and fast database in Memory. I used this since 2000.
Offline
He he, I find it myself but I didnd't have time to update here. The paper which describes the Delphi AMPQ client is here:
http://66.85.163.250/files/articles/BP37_38_AMQP.pdf
kbmMW also have their own messaging system (WIB - publish/subcribe) which is good to use when deploy AppServer in LAN (one executable mORMot http.sys server + WIB server) - easy to make an installation script, and all the settings on default since the number of user will be small. When deploy in cloud the other scenario is good: mORMot AppServer separately and RabbitMQ+Delphi AMPQ client - and can be made some speed optimizations conf. and installation doesn't matter because it's your server and you are in charge of.
Last edited by emk (2016-04-08 09:29:19)
Offline
Is it possible to emulate Open Data Protocol with Mormot?
Offline
I did give it a try ... have a look:
https://github.com/LongDirtyAnimAlf/OpenUI5_mORMot
Offline
Hello Guys !
How is the best way to come over a Proxyserver with a
TSQLHttpServer as a Server and a
TSQLHttpClientWebsockets to the Server as a client
Both or one of them could be behind a Proxyserver
I use port 8888 as in sample 31
Also a callback as in sample 31 should work
Thanks in advance
cybertrace
Offline
Hello AB !
With Skype it is no Problem to get connetion .
I teste once the sample 31 but in out Company it did'nt work
I only have the Information
gate:8080 then user and Password
Maybe the Gateway doesn't like Websockets ??
What is an alternativ to Websockets to handle a sample like sample 31 with Client callbacks
Thanks
Offline
Hello Guys !
In sample 31 how it is possible on the serverside to get an Information from what Client pseudo the message and the connectionrequest is coming to donot send it back this message in the Notifyevent to this Client
procedure TClientService.NewOrdersSend(const pseudo : string; var Orders : TOrderBuffer);
var i: integer;
formattedDateTime : string;
sMsg : string;
begin
DateTimeToString(formattedDateTime, 'dd/mm/yyyy hh:nn:ss.zzz', Now);
// frmServer.QueueLogMsg('Time : ' + formattedDateTime + ' came from : ' + pseudo + ' message : ' + msg);
for ix := high(fConnected) downto 0 do // downwards for InterfaceArrayDelete()
try
if pseudo <> 'Master' then // pseudo HERE SHOULD BE THE INFORMATION FROM THE STRUCTURE OF ONE CLIENT
fConnected[ix].NotifyOrderMsg(pseudo,Orders);
except
InterfaceArrayDelete(fConnected,i); // unsubscribe the callback on failure
end;
end;
I Need here also an Information what client establishes a callback with an structure while logging on on the Server and store this information into a struct. Alos a logoncheck autentication should be made and reject in case of no license the connection
TAccountInfo = record
sCompanyName : string;
sAccountName : string;
sNameServer : string;
Accountnumber : longint;
end;
I am not familiar with the knowledge of Interfaces and I Need your help, maybe someone can provide me with a sample like sample 31
thanks in advance
Offline
Pages: 1