Einzelnen Beitrag anzeigen

mjustin

Registriert seit: 14. Apr 2008
3.006 Beiträge
 
Delphi 2009 Professional
 
#18

AW: Nachrichten für mehr als 10.000 Rechner im Netzwerk - Welche Technik verwenden?

  Alt 9. Mär 2016, 08:50
Deshalb die Idee, ob Delphi irgendwelche Techniken hat, w.z.B. SignalR, um mein Vorhaben mit Delphi Mitteln umzusetzen.
Eine kommerzielle WebSocket Client und Server Implementierung gibt es unter http://websockets.esegece.com/

Code:
    Fully functional multithreaded WebSocket server according to RFC 6455.
    Supports Firemonkey (Windows, MacOS, iOS and Android).
    Supports Lazarus / FreePascal.
    Supports CBuilder.
    Supports C# .NET through sgcWebSockets.dll
    Supports Chrome, Firefox, Safari, Opera and Internet Explorer (including iPhone, iPad and iPod)
    Binary and Full Unicode Messages Support
    Message compression using PerMessage_Deflate extension.
    Flash FallBack for Web Browsers without native WebSockets (like Internet Explorer 6-9).
    Multiple Threads Support
    Server component providing WebSocket and HTTP connections through the same port.
    Client WebSocket supports connections through Socket.IO Servers.
    Client WebSocket supports connections through HTTP Proxy Servers.
    WatchDog and HeartBeat built-in support.
    Events Available: OnConnect, OnDisconnect, OnMessage, OnError
    Built-in sub-protocols: JSON-RPC 2.0(Transactional Messages, PubSub, RPC, Queues, QoS and more), Datasets, Binary Files, WebRTC and WAMP.
    Built-in Javascript libraries to support browser clients.
    Easy to setup
    Javascript Events for a full control
    Async Events using Ajax
    SSL/TLS support on Server and Client components
Ob das über 10000 Connections schafft sollte der Author sicher beantworten können. Ich würde aber zur Sicherheit immer auch eigene Lastsimulationen durchführen.

Indy-basierte Lösungen sind allerdings nicht für so hohe Verbindungszahlen geeignet wenn die Connections alle gleichzeitig geöffnet sein müssen. (nachzulesen z.B. unter http://codeverge.com/embarcadero.del...read-c/1072348).

Wenn es 20000 Clients sein sollen und der Server in Delphi implementiert werden muss, könnte man

* mehrere Server laufen lassen (um die Last zu verteilen)
* die Verbindung nur kurz geöffnet lassen und serverseitig die wartenden Informationen in einem Cache halten, damit der Client sehr schnell wieder die Verbindung trennen kann *)
* UDP verwenden um Clients über neue Nachrichten zu informieren

*) aber das Betriebssystem wird dann den Socket immer noch für längere Zeit offen halten. Wenn sich viele Clients immer wieder verbinden und trennen, kann das Betriebssystem dann nach einiger Zeit keine neuen Sockets mehr öffnen (das ist einer der Gründe warum z.B. HTTP 1.1 die Verbindung geöffnet hält - 'HTTP/1.1 makes persistent connections the default.' - http://www8.org/w8-papers/5c-protocols/key/key.html )
Michael Justin
habarisoft.com

Geändert von mjustin ( 9. Mär 2016 um 09:19 Uhr)
  Mit Zitat antworten Zitat