mmofacts.com

Server in C

gepostet vor 15 Jahre, 8 Monate von Kapsonfire

Ich würde gerne mein Browsergame in C programmieren.

Allerdingst stellt sich für mich die Frage mit den Updates für das Spiel...

Ich kann ja nicht für jeden Hotfix oder so mal schnell den Server abstellen und die neu Compilierte Version starten. Also wie löse ich das am besten. Der Server ruft für bestimme Programmfunktionen ihre kleinen librarys auf? Was passiert aber wenn gerade in dem moment versucht wird auf die library zuzugreifen?

Oder ich mach eine text datei like PHP die dann einfach der Server interpretiert.. was ich aber nicht so gerne hätte. Weils dann doch mehr an die Performance geht.

Was habt ihr so an Erfahrungen gemacht?

gepostet vor 15 Jahre, 8 Monate von Bringer

Original von Browser-Games World

Oder ich mach eine text datei like PHP die dann einfach der Server interpretiert.. was ich aber nicht so gerne hätte. Weils dann doch mehr an die Performance geht.

Was habt ihr so an Erfahrungen gemacht?

Zumindest folgende:

Das es bei der Performance keinen großen Unterschied mehr macht wie du es löst - wenn es dein erstes größeres C-Projekt ist. Aber Textdateien zu interpretieren halte ich für schlechten Stil wenn man schon mit C arbeitet.

gepostet vor 15 Jahre, 8 Monate von TheUndeadable

> Ich kann ja nicht für jeden Hotfix oder so mal schnell den Server abstellen und die neu Compilierte Version starten.

Unter Win kannst du dem http.sys sagen, dass er mal schnell alle eingehenden HTTP-Requests annehmen soll bis dein Prozess neu gestartet ist und sie wieder annehmen kann.

Wenn dein Prozess innerhalb von 1 bis 2 Sekunden neu startet, sollten die User nichts mitbekommen.

Bzw du kannst deinen zweiten Prozess parallel starten. Der nimmt dann alle neuen HTTP-Requests an, während dein alter Prozess noch die Reste abarbeitet und irgendwann getötet wird.

Ob dies unter Linux funktioniert, weiß ich nicht. Wenn nicht, kann man es ja schnell nachimplementieren, ist ja OpenSource.

gepostet vor 15 Jahre, 8 Monate von Klaus

Wenn du richtig viel Performance und Kontrolle haben willst, dann programmier mit Assembler. Da kannst du deine Hotfixes auch gleich in den Speicher patchen ohne dein Programm neu zu starten!

gepostet vor 15 Jahre, 8 Monate von Dunedan

Original von TheUndeadable

Bzw du kannst deinen zweiten Prozess parallel starten. Der nimmt dann alle neuen HTTP-Requests an, während dein alter Prozess noch die Reste abarbeitet und irgendwann getötet wird.

Ob dies unter Linux funktioniert, weiß ich nicht. Wenn nicht, kann man es ja schnell nachimplementieren, ist ja OpenSource.

Funktioniert mit fastcgi, auch unabhängig von C, vollkommen problemlos.

gepostet vor 15 Jahre, 8 Monate von TheUndeadable

> Funktioniert mit fastcgi, auch unabhängig von C, vollkommen problemlos.

Dann hätte man hier einen Ansatz.

Oder man arbeitet gleich mit zwei Prozessen: Einen, der die HTTP-Verbindungen annimmt, und einen, der sie verarbeitet. Man hat dort zwar einen prinzipiell unnötigen Prozesswechsel drin, der mit einem richtigen Betriebssystem vermieden wird, aber als Notlösung würde das ja auch funktionieren.

Nicht anders arbeitet ja das von dir genannte FastCGI.

gepostet vor 15 Jahre, 8 Monate von altertoby

und was würde man machen, wenn der Prozess um einiges länger braucht (bis zu mehreren Minuten) bis er bereit ist, neue Requests zu verarbeiten?

gepostet vor 15 Jahre, 8 Monate von Bringer

Original von altertoby

und was würde man machen, wenn der Prozess um einiges länger braucht (bis zu mehreren Minuten) bis er bereit ist, neue Requests zu verarbeiten?

*scnr

fluchen?

gepostet vor 15 Jahre, 8 Monate von TheUndeadable

> und was würde man machen, wenn der Prozess um einiges länger braucht (bis zu mehreren Minuten) bis er bereit ist, neue Requests zu verarbeiten?

Solang kann man den alten Prozess weiterarbeiten lassen.

Der neue Prozess kann dann dem Dispatcher mitteilen, dass er nun bereit zur Annahme ist.

Ist aber in meinen Augen ein relativ großer Aufwand das stabil und zuverlässig hinzubekommen. Abgesehen davon halte ich C nicht als sinnvolle Sprache um einen Applikationsserver aufzubauen, aber dies ist ein anderes Thema.

gepostet vor 15 Jahre, 8 Monate von knalli

Original von Klaus

Wenn du richtig viel Performance und Kontrolle haben willst, dann programmier mit Assembler. Da kannst du deine Hotfixes auch gleich in den Speicher patchen ohne dein Programm neu zu starten!

Made my day.. *thumbs-up*

gepostet vor 15 Jahre, 8 Monate von Kapsonfire

asm seh ich nicht wirklich als alternative

das mit dem zweiten prozess halte ich für ne alternative, allerdings überzeugt es auch wieder unnötig last

also das simpelste wäre ja wirklich neuen kern starten warten bis fertig

alten aus

weiss einer wie dass die bekannten antihacksystem ala punkbuster machen?

die updaten sich ja selber imprinzip ja auch aus dem netz heraus und müssen nicht neugestartet werden

gepostet vor 15 Jahre, 7 Monate von knalli

Solange man ordentlich definierte Schnittstellen nutzt, die man _vorher_ auch so spezifiziert hat, das das gesamte System gut erweiterbar ist, reicht es im Grunde aus, nur neue Plugins/Module zur Verfügung zu stellen. Das heißt, es gibt irgendwo eine Art Konsole/Registry, die man on-the-fly umkonfigurieren kann. Was weiß ich, Routen für den Webserver, Protokollversion, usw.

Das kann man mit jeder Sprache machen, in meinen Augen aber mit höher entwickelten wie ASM/C besser und effektiver.

Stichworte: Verteilte Systeme, Middleware

Auf diese Diskussion antworten