Alchemist` Δημοσ. 3 Μαΐου 2014 Δημοσ. 3 Μαΐου 2014 Καλησπέρα, έχω το source code μιας (μεγάλης, free) εφαρμογής σε java (ΜΜΟ server [l2j συγκεκριμένα]). Υπάρχει εύκολος και γρήγορος τρόπος να μετατραπεί ο κώδικας αυτός σε C++, πέρα από το να κάτσει κάποιιος και να το ξαναγράψει?Το συζήτησα ήδη με ένα φίλο και μου είπε πως σίγουρα ένα πρόβλημα είναι ο garbage collector που έχει η java. Αν δεν εφαρμοστεί κάτι ανάλογο στο νέο πρόγραμμα θα έχει memory leaks.Υπάρχει κάποιο άλλο αντίστοιχο πρόβλημα? Πέρα από αυτό, θα ήθελα να ρωτήσω το εξής. Γνωρίζω ότι το πρόγραμμα θα τρέχει πιο γρήγορα σε C++, αλλά για τί διαφορές μιλάμε? Με βάση δηλαδή τον κόπο-εργασία που απαιτείται σε σχέση με το κέρδος σε απόδοση αξίζει τον κόπο τέτοιο εγχείρημα? Ευχαριστώ προκαταβολικά.
Moderators Kercyn Δημοσ. 3 Μαΐου 2014 Moderators Δημοσ. 3 Μαΐου 2014 Γνωρίζω ότι το πρόγραμμα θα τρέχει πιο γρήγορα σε C++ Όχι βέβαια. Από πού το συμπέρανες αυτό; Νομίζω έχω δει κάποια προγράμματα (και αν θυμάμαι καλά όχι free) που κάνουν αυτή τη μετατροπή, αλλά η δουλειά που θα χρειαστεί να ρίξεις για να το φέρεις στα ίσα του (αν το φέρεις ποτέ) είναι τεράστια. Μην περιμένεις κανένα έτοιμο εργαλείο να σου μετατρέψει ένα project μεγέθους l2j σε C++ χωρίς να σου καταστρέψει τα πάντα. Disclaimer: Η μόνη φορά που έχω χρησιμοποιήσει κάτι αντίστοιχο ήταν πολύ παλιά και όχι για το συνδυασμό Java/C++, οπότε αυτά που σου λέω είναι η γνώμη μου και η εκτίμηση που κάνω. Ίσως κάποιος που έχει ασχοληθεί να μπορεί να σου δώσει περισσότερες λεπτομέρειες. Πάντως εγώ δε θα το έκανα ούτε γι' αστείο
TheOneGandalf Δημοσ. 3 Μαΐου 2014 Δημοσ. 3 Μαΐου 2014 Καλησπέρα, έχω το source code μιας (μεγάλης, free) εφαρμογής σε java (ΜΜΟ server [l2j συγκεκριμένα]). Υπάρχει εύκολος και γρήγορος τρόπος να μετατραπεί ο κώδικας αυτός σε C++, πέρα από το να κάτσει κάποιιος και να το ξαναγράψει? Το συζήτησα ήδη με ένα φίλο και μου είπε πως σίγουρα ένα πρόβλημα είναι ο garbage collector που έχει η java. Αν δεν εφαρμοστεί κάτι ανάλογο στο νέο πρόγραμμα θα έχει memory leaks. Υπάρχει κάποιο άλλο αντίστοιχο πρόβλημα? Πέρα από αυτό, θα ήθελα να ρωτήσω το εξής. Γνωρίζω ότι το πρόγραμμα θα τρέχει πιο γρήγορα σε C++, αλλά για τί διαφορές μιλάμε? Με βάση δηλαδή τον κόπο-εργασία που απαιτείται σε σχέση με το κέρδος σε απόδοση αξίζει τον κόπο τέτοιο εγχείρημα? Ευχαριστώ προκαταβολικά. Αυτό που λες θα γίνοταν αν είχες μαζί σου καμμιά όμαδα όπως η NCsoft όταν έφτιαξε αρχικά το παιχνίδι..Αλλά και πάλι, τα οφέλη θα ήταν λίγα εώς μηδαμινά.. Με λίγα λόγια, ούτε να το σκέφτεσαι Παλιά είχα ασχοληθεί αρκετά με l2j και κάπου είχα διαβάσει πως άρχισε όλο αυτό το πράγμα κλπ. Ε λοιπόν τα παλικάρια που το ξεκινήσανε κάνανε κάποια test πρώτα και είδανε ότι οι διαφορές σε ταχύτητα εκτέλεσης αλλά και σε άλλα πράγματα ήταν πολύ μικρή και γι αυτό επέλεξαν τη java. Στο λεω δηλαδή, για να μην νομίζεις ότι απλά πηρανε μια ΟΟ γλώσσα και αρχίσανε να γράφουν κώδικα
defacer Δημοσ. 3 Μαΐου 2014 Δημοσ. 3 Μαΐου 2014 Δεν υπάρχει περίπτωση να μετατραπεί ο κώδικας σε C++ χωρίς τιτάνια προσπάθεια. Αν παρόλα αυτά κάπως μετατραπεί είναι πολύ αμφίβολο το κατα πόσον θα τρέχει πιο γρήγορα, πόσο μάλλον το αν η διαφορά αξίζει τον κόπο. Recommendation: forget it with prejudice γιατί εξαρχής ήταν κακή ιδέα εκτός κι αν έχεις στα χέρια σου αδιάσειστα δεδομένα που λένε ότι η απόδοση του server δεν είναι αρκετή και γι' αυτό φταίει η Java.
Moderators Kercyn Δημοσ. 3 Μαΐου 2014 Moderators Δημοσ. 3 Μαΐου 2014 εκτός κι αν έχεις στα χέρια σου αδιάσειστα δεδομένα που λένε ότι η απόδοση του server δεν είναι αρκετή και γι' αυτό φταίει η Java. Και κάτι τέτοιο δε συμβαίνει γιατί ο l2j τρέχει μια χαρά "by default" (αν ξέρεις τι κάνεις, εννοείται). Είχα ασχοληθεί κι εγώ πριν από κάτι χρόνια και είχα καταφέρει να τον στήσω κι έτρεχε μια χαρά (δεδομένου ότι τον είχα σε ένα pc για κλάμματα). Απλώς οποιοσδήποτε σοβαρός admin πειράζει τον κώδικα του l2j για bug fixes, optimizations κλπ. Επίσης, αυτό που είπε ο TheOneGandalf το είχα διαβάσει κι εγώ (κάποτε... )
defacer Δημοσ. 3 Μαΐου 2014 Δημοσ. 3 Μαΐου 2014 Ναι, δεν το είπα επειδή πιστεύω ότι ισχύει αλλά ούτως ώστε α) να δείξω το από πού θα έπρεπε κανείς να ξεκινήσει αν θέλει να πιάσει στα χέρια του σοβαρά ένα τέτοιο ζήτημα και β) να είμαι σωστότερος από το πιο ωμό "δεν υπάρχει περίπτωση ποτέεε ποτέε ποτέεε ποτέεεε..."
Alchemist` Δημοσ. 4 Μαΐου 2014 Μέλος Δημοσ. 4 Μαΐου 2014 Καλώς λοιπόν, το παρατάμε το εγχείρημα. Ευχαριστώ για τον χρόνο όλων.Ερώτηση-Διευκρίνηση 1: Οι l2j server σηκώνουν το πολύ καμιά 500αριά άτομα Online χωρίς Lag. Από το 2005 που έπαιζα l2 ως αιτία για το πράγμα αυτό άκουγα πως ήταν η java. Για αυτό, μιας και από τότε έχουμε αποκτήσει κάποιες Χ γνώσεις, ρώτησα το αν θα άξιζε η μετατροπή. Εφόσον δεν θα έχει κανένα πλεονέκτημα, είναι out of question το θέμα. Πάντως εφόσον η C++ είναι πιο κοντά στο hardware, φαντάζομαι ότι μπορείς να παίξεις περισσότερο με tweaks & tricks ώστε να τρέξεις πιο γρήγορα το εκάστοτε πρόγραμμα. Ερώτηση 2, μιάς και κάποιοι γνωρίζετε κάποια πράγματα για το συγκεκριμένο ζήτημα (l2j): Ο λόγος που ασχολούμαι με το θέμα, είναι το ότι το παιχνίδι με την τωρινή μορφή του, θυμίζει πλέον περισσότερο star wars, παρά Lineage. Για αυτό σκεφτόμουν να σηκώσω έναν old school (C4/C5/Interlude) server. Δεν έχω πρόβλημα με την δουλειά (έχω και κάποιες βασικές γνώσεις), ούτε και με το μηχάνημα. (μπορώ να πάρω, για αρχή, static IP, και να σηκώσω δοκιμαστικά τον server στο desktop της υπογραφής μέχρι να δώ πως πάει από άποψη κινητικότητας το θέμα.) Ενδιαφέρετε να βοηθήσει κανείς?
παπι Δημοσ. 4 Μαΐου 2014 Δημοσ. 4 Μαΐου 2014 Βασικα το lineage 2 ειναι παιχνιδι με lag. Δεν μπορεις να κανεις τιποτα. 1
Moderators Kercyn Δημοσ. 4 Μαΐου 2014 Moderators Δημοσ. 4 Μαΐου 2014 1) Το θέμα με τον l2j είναι ότι για να φτάσεις στο σημείο να σε κρατάει πίσω η Java θέλει να κάνεις τόσα optimizations και να διορθώσεις τόσα πράγματα που δε θα σου μείνει χρόνος να σκεφτείς το "με κρατάει πίσω η Java". Πριν από λίγο καιρό μίλαγα με έναν συμφοιτητή μου που έχει ασχοληθεί πιο πρόσφατα με το θέμα και ασχολείται γενικά με τη Java. Μου είπε λοιπόν ότι όταν ένας παίκτης παίρνει ένα buff, ξαναυπολογίζονται όλα τα buffs για να βρεθούν τα stats του, αντί να υπολογίζεται μόνο το τελευταίο buff. Σκέψου τώρα αυτό σε έναν κλασσικό pvp server με 200 παίκτες που έχουν 25 buffs ο καθένας. Φαντάζεσαι τι σπατάλη υπάρχει εκεί (το "πρόβλημα" το περιγράφω στο περίπου γιατί δεν το θυμάμαι καλά). 2) Επειδή έχω πτυχιακή και δε μου μένει επιπλέον χρόνος για ακόμα ένα μεγάλο project, δυστυχώς δε μπορώ να ασχοληθώ σοβαρά σε σταθερή βάση. Αν, παρ' ολ' αυτά έχεις κάποιο πρόβλημα ή απορία θα χαρώ πολύ να σε βοηθήσω. 1
ntellos Δημοσ. 4 Μαΐου 2014 Δημοσ. 4 Μαΐου 2014 Καλώς λοιπόν, το παρατάμε το εγχείρημα. Ευχαριστώ για τον χρόνο όλων. Ερώτηση-Διευκρίνηση 1: Οι l2j server σηκώνουν το πολύ καμιά 500αριά άτομα Online χωρίς Lag. Από το 2005 που έπαιζα l2 ως αιτία για το πράγμα αυτό άκουγα πως ήταν η java. Πάντως εφόσον η C++ είναι πιο κοντά στο hardware, φαντάζομαι ότι μπορείς να παίξεις περισσότερο με tweaks & tricks ώστε να τρέξεις πιο γρήγορα το εκάστοτε πρόγραμμα. Ερώτηση 2, μιάς και κάποιοι γνωρίζετε κάποια πράγματα για το συγκεκριμένο ζήτημα (l2j): Ο λόγος που ασχολούμαι με το θέμα, είναι το ότι το παιχνίδι με την τωρινή μορφή του, θυμίζει πλέον περισσότερο star wars, παρά Lineage. Για αυτό σκεφτόμουν να σηκώσω έναν old school (C4/C5/Interlude) server. To l2j-server είναι ένα open-source project με GNU-GPL άδεια. Επίσης οι άνθρωποι που το αναπτύσσουν το κάνουν από χόμπι κi όχι δουλειά (χρήματα) οπότε καταλαβαίνεις ότι δεν γίνεται ποτέ να ακολουθάει πλήρως τον official, ούτε να έχει το ίδιο επίπεδο optimization στον κώδικα κτλπ κτλπ. Επίσης επειδή ακριβώς είναι open-source μπορεί ο καθένας να δημιουργήσει το δικό του fork/server. Υπάρχουν πάρα πολλά forks εκεί έξω για όλα τα chronicle του παιχνιδιού, λίγα είναι αξιόλογα όμως, από πλευράς κώδικα. Είναι λογικό κιόλας αφού μπορεί ο κάθε "άσχετος" να φτιάξει το δικό του. Υπήρξαν όμως low-rate l2j servers με χιλιάδες κόσμο online χωρίς προβλήματα, πχ ο raidfight σήκωνε παλιότερα πάνω από 4χιλιάρικα κόσμο απροβλημάτιστα. Κι αυτό είναι που επιβεβαιώνει ότι η L2J δεν υστερεί σε κάτι, απλά χρειάζεται να πέσει στα σωστά χέρια. ΥΓ: Οτιδήποτε απορία έχεις μπορείς να με ρωτήσεις. ΥΓ2: Επίσης να ξέρεις ότι το optimization δεν γίνεται μόνο σε επίπεδο κώδικα. Όλο το υπολογιστικό σύστημα ρυθμίζεις για να πετύχεις καλύτερες επιδόσεις. Αξιοσημείωτο για τα L2J projects είναι ότι ένας μη ρυθμισμένος σωστά garbage collector είναι πιο καταστροφικός απ' όλες τις απώλειες λόγω κακού κώδικα μαζί. Άλλο παράδειγμα είναι το load του σκληρού. Τον πιο optimized κώδικα να έχεις, αν ο gameserver είναι στον ίδιο σκληρό με την βάση τότε δεν πρόκειται ποτέ να σηκώσεις πολύ κόσμο.
TheOneGandalf Δημοσ. 4 Μαΐου 2014 Δημοσ. 4 Μαΐου 2014 Καλώς λοιπόν, το παρατάμε το εγχείρημα. Ευχαριστώ για τον χρόνο όλων. Ερώτηση-Διευκρίνηση 1: Οι l2j server σηκώνουν το πολύ καμιά 500αριά άτομα Online χωρίς Lag. Από το 2005 που έπαιζα l2 ως αιτία για το πράγμα αυτό άκουγα πως ήταν η java. Για αυτό, μιας και από τότε έχουμε αποκτήσει κάποιες Χ γνώσεις, ρώτησα το αν θα άξιζε η μετατροπή. Εφόσον δεν θα έχει κανένα πλεονέκτημα, είναι out of question το θέμα. Πάντως εφόσον η C++ είναι πιο κοντά στο hardware, φαντάζομαι ότι μπορείς να παίξεις περισσότερο με tweaks & tricks ώστε να τρέξεις πιο γρήγορα το εκάστοτε πρόγραμμα. Ερώτηση 2, μιάς και κάποιοι γνωρίζετε κάποια πράγματα για το συγκεκριμένο ζήτημα (l2j): Ο λόγος που ασχολούμαι με το θέμα, είναι το ότι το παιχνίδι με την τωρινή μορφή του, θυμίζει πλέον περισσότερο star wars, παρά Lineage. Για αυτό σκεφτόμουν να σηκώσω έναν old school (C4/C5/Interlude) server. Δεν έχω πρόβλημα με την δουλειά (έχω και κάποιες βασικές γνώσεις), ούτε και με το μηχάνημα. (μπορώ να πάρω, για αρχή, static IP, και να σηκώσω δοκιμαστικά τον server στο desktop της υπογραφής μέχρι να δώ πως πάει από άποψη κινητικότητας το θέμα.) Ενδιαφέρετε να βοηθήσει κανείς? Έχεις σκοπό να σηκώσεις σέρβερ για την πλάκα σου ή να το πας σε κάτι σοβαρότερο? Η αλήθεια είναι ότι μου εχει μεινει απωθημενο αυτο με το L2J μιας και όταν είχα αρχίσει να ασχολούμαι (6-7 χρόνια πριν) οι γνώσεις που είχα στην αρχή ήταν απλά να αλλάζω configs, weap stats απο db/datapack και τέτοιου είδους βλακείες. Μετά το έφτασα μέχρι να κάνω apply custom patches και να μπορώ να κατανοήσω βασικά πράγματα απο τον κώδικα έτσι ώστε π.χ να φτιάξω ενα simple voice command. Παπαριές δηλαδή Τέλος πάντων, μετά που μπήκα πανεπιστήμιο και άρχισα να μαθαίνω "πιο σοβαρά" προγραμματισμό ήθελα να ασχοληθώ αλλά δεν είχα κανέναν άλλο γνωστό/φίλο που να ήθελε και γι αυτό δεν το έπαιρνα ποτέ απόφαση. Για να τελειώνω με αυτό το σεντόνι, η αλήθεια είναι ότι ακόμα θέλω να ασχοληθώ(όχι ότι έχω άπειρο free time, αλλά κουτσα στραβά ). Απλά να ξέρεις, σε περίπτωση που το σκέφτεσαι για σοβαρά, θα πρέπει να λάβεις υπ' όψιν 2 πράγματα 1) Ότι χρείαζεται πολυ καιρο ενασχολησης με τον κωδικα έτσι ώστε να φτάσεις σε σημείο να πεις, Έχω μια Α άνεση, μπορώ να σηκωσω επίσημα εναν σερβερ και αν παρουσιαστεί κάποιο bug, είμαι σε θέση να το διορθώσω. 2) Ότι το community και σχετικά με το L2J - και με το L2, έχει μειωθεί δραματικά τα τελευταία χρόνια, δηλαδή παίζουν πολύ λιγότερα άτομα πλεον.
Alchemist` Δημοσ. 5 Μαΐου 2014 Μέλος Δημοσ. 5 Μαΐου 2014 Παιδιά ευχαριστώ για την υποστήριξη. Έχω αρχίσει και ασχολούμαι σοβαρά με το θέμα. Αρχικά θέλω να στήσω τον σερβερ για να τον κάνω στην συνέχεια προσβάσιμο και όσους από εσάς θέλετε να βοηθήσετε. Έχω το εξής πρόβλημα: 1) L2 c4 client δεν τρέχει σε win7x64. ( η retail έκδοση που βρήκα εδώ: http://www.fileplanet.com/160491/download/Lineage-2---Chronicle-4:-Scions-of-Destiny-%28Game-Client%29) 2) Το έλυσα αυτό τροποποιώντας το system Αντικατέστησα με νεότερες εκδόσεις τα ακόλουθα αρχεία: Core.dll, core.int, core.u, D3DDrv.dll, engine.dll, engine.int, engine.u, gameguard.des, NWindow.dll 3) O client τώρα με βάζει κανονικά στο Log in screen. 4) Έχω σηκώσει τον σέρβερ και δουλευει κανονικά (στο localhost, Login + Game server) 5) Το client δεν αντιδρά στο Login (δεν συνδέεται ούτε και βγάζει κανένα μύνημα) 6) Αν σπαμάρω το log in button, πάλι ο client δεν βγάζει τίποτα, αλλά ο σέρβερ μου βγάζει ότι από το IP αυτό γίνεται flood 7) Άρα αυτό σημαίνει ότι υπάρχει επικοινωνία σερβερ και cleint, αλλά ο client δεν καταλαβαίνει ότι το login attempt έχει γίνει αποδεκτό ώστε να προχωρήσει.Αυτό που δεν καταλαβαίνω είναι το εάν το πρόβλημα είναι από την πλευρά του σερβερ (δεν απαντάει στο Log in) ή από τον Client (το system δλδ) και δεν καταλαβαίνει την απάντηση που του δίνει ο σέρβερ.Το Ping l2authD.lineage2.com μου δείχνει ότι ο σέρβερ δέχεται κανονικά αιτήματα.Μπορεί να βοηθήσει κανείς? Έχετε κάποιο λειτουργικό και "καθαρό" system για C4? Ευχαριστώ προκαταβολικά.
defacer Δημοσ. 5 Μαΐου 2014 Δημοσ. 5 Μαΐου 2014 Βάλε wireshark να δεις πρώτα τι γίνεται με την επικοινωνία σε επίπεδο TCP.
Alchemist` Δημοσ. 5 Μαΐου 2014 Μέλος Δημοσ. 5 Μαΐου 2014 Βάλε wireshark να δεις πρώτα τι γίνεται με την επικοινωνία σε επίπεδο TCP. Μέσα από το localhost μιλάω ρε σύ, τι ακριβώς να δω με το wireshark? Στο ίδιο μηχάνημα τρέχουν και ο σερβερ και ο client. Κακώς που δεν το ανέφερα ξεκάθαρα.
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα