Πώς να αποφασίσετε πότε να χρησιμοποιήσετε το Node.js;



Είμαι νέος σε αυτά τα πράγματα, αλλά τελευταία ακούω πολλά για το πόσο καλό είναι το [Node.js](https://en.wikipedia.org/wiki/Node.js). Λαμβάνοντας υπόψη πόσο μου αρέσει να δουλεύω με την jQuery και την JavaScript γενικά, δεν μπορώ'δεν μπορώ να μην αναρωτηθώ πώς να αποφασίσω πότε να χρησιμοποιήσω το Node.js. Η διαδικτυακή εφαρμογή που έχω στο μυαλό μου είναι κάτι σαν το [Bitly](https://en.wikipedia.org/wiki/Bitly) - παίρνει κάποιο περιεχόμενο, το αρχειοθετεί.


Από όλη την εργασία που έκανα τις τελευταίες μέρες, πήρα τις ακόλουθες πληροφορίες. Node.js


* είναι ένα εργαλείο γραμμής εντολών που μπορεί να εκτελεστεί ως κανονικός διακομιστής ιστού και επιτρέπει την εκτέλεση προγραμμάτων JavaScript
* χρησιμοποιεί τη σπουδαία [V8 JavaScript engine](https://en.wikipedia.org/wiki/V8_%28JavaScript_engine%29)
* είναι πολύ καλό όταν πρέπει να κάνετε πολλά πράγματα ταυτόχρονα
* είναι βασισμένο σε συμβάντα, έτσι ώστε όλα τα υπέροχα [Ajax](https://en.wikipedia.org/wiki/Ajax_%28programming%29)-like πράγματα να μπορούν να γίνουν στην πλευρά του διακομιστή
* μας επιτρέπει να μοιραζόμαστε κώδικα μεταξύ του προγράμματος περιήγησης και του backend
* μας επιτρέπει να μιλάμε με τη MySQL


Ορισμένες από τις πηγές που έχω συναντήσει είναι οι εξής:


* [Diving into Node.js - Εισαγωγή και εγκατάσταση](http://www.stoimen.com/blog/2010/11/16/diving-into-node-js-introduction-and-installation/)
* [Understanding NodeJS](http://debuggable.com/posts/understanding-node-js:4bd98440-45e4-4a9a-8ef7-0f7ecbdd56cb)
* [Node by Example](http://blog.osbutler.com/categories/node-by-example/?page=3) ([Archive.is](https://archive.fo/exhaR))
* [Let's Make a Web App: NodePad](http://dailyjs.com/2010/11/01/node-tutorial/)


Λαμβάνοντας υπόψη ότι το Node.js μπορεί να τρέξει σχεδόν out-of-the-box σε [Amazon's EC2](https://en.wikipedia.org/wiki/Amazon_Elastic_Compute_Cloud) instances, προσπαθώ να καταλάβω τι είδους προβλήματα απαιτούν το Node.js σε αντίθεση με οποιονδήποτε από τους ισχυρούς βασιλιάδες εκεί έξω όπως η [PHP](https://en.wikipedia.org/wiki/PHP), η [Python](https://en.wikipedia.org/wiki/Python_%28programming_language%29) και η [Ruby](https://en.wikipedia.org/wiki/Ruby_%28programming_language%29). Καταλαβαίνω ότι εξαρτάται πραγματικά από την εμπειρία που έχει κάποιος σε μια γλώσσα, αλλά η ερώτησή μου εμπίπτει περισσότερο στη γενική κατηγορία του: Πότε πρέπει να χρησιμοποιείται ένα συγκεκριμένο πλαίσιο και για τι είδους προβλήματα είναι ιδιαίτερα κατάλληλο;
Κάνατε πολύ καλή δουλειά στο να συνοψίσετε τι είναι φοβερό στο Node.js. Η αίσθησή μου είναι ότι το Node.js είναι ιδιαίτερα κατάλληλο για εφαρμογές όπου θα θέλατε να διατηρήσετε μια μόνιμη σύνδεση από το πρόγραμμα περιήγησης πίσω στον διακομιστή. Χρησιμοποιώντας μια τεχνική γνωστή ως ["long-polling"](https://en.wikipedia.org/wiki/Push_technology#Long_polling), μπορείτε να γράψετε μια εφαρμογή που στέλνει ενημερώσεις στον χρήστη σε πραγματικό χρόνο. Η πραγματοποίηση long polling σε πολλούς από τους γίγαντες του διαδικτύου, όπως το [Ruby on Rails](https://en.wikipedia.org/wiki/Ruby_on_Rails) ή το [Django](https://en.wikipedia.org/wiki/Django_%28web_framework%29), θα δημιουργούσε τεράστιο φόρτο στον διακομιστή, επειδή κάθε ενεργός πελάτης τρώει μια διεργασία του διακομιστή. Αυτή η κατάσταση ισοδυναμεί με επίθεση [tarpit](https://en.wikipedia.org/wiki/Tarpit_(networking)). Όταν χρησιμοποιείτε κάτι όπως το Node.js, ο διακομιστής δεν έχει ανάγκη να διατηρεί ξεχωριστά νήματα για κάθε ανοιχτή σύνδεση. 


Αυτό σημαίνει ότι μπορείτε να δημιουργήσετε μια [εφαρμογή συνομιλίας με βάση το πρόγραμμα περιήγησης](https://github.com/rivalslayer/node_chat) σε Node.js που δεν χρειάζεται σχεδόν καθόλου πόρους συστήματος για να εξυπηρετεί πολλούς πελάτες. Κάθε φορά που θέλετε να κάνετε αυτού του είδους τη μακροχρόνια αναζήτηση, το Node.js είναι μια εξαιρετική επιλογή. 


Αξίζει να αναφέρουμε ότι και η Ruby και η Python έχουν εργαλεία για να κάνουν κάτι τέτοιο ([eventmachine](http://rubyeventmachine.com/) και [twisted](https://twistedmatrix.com/trac/), αντίστοιχα), αλλά ότι το Node.js το κάνει εξαιρετικά καλά, και από την αρχή. Η JavaScript είναι εξαιρετικά καλά τοποθετημένη σε ένα μοντέλο ταυτόχρονης λειτουργίας βασισμένο σε callback, και υπερέχει εδώ. Επίσης, η δυνατότητα σειριοποίησης και αποσειριοποίησης με JSON εγγενές τόσο στον πελάτη όσο και στον διακομιστή είναι αρκετά έξυπνη.


Ανυπομονώ να διαβάσω άλλες απαντήσεις εδώ, αυτή είναι μια φανταστική ερώτηση.


Αξίζει να επισημάνουμε ότι το Node.js είναι επίσης εξαιρετικό για καταστάσεις στις οποίες θα επαναχρησιμοποιήσετε πολύ κώδικα σε όλο το χάσμα πελάτη/εξυπηρετητή. Το [Meteor framework](https://meteor.com) το κάνει αυτό πολύ εύκολο, και πολλοί άνθρωποι προτείνουν ότι αυτό μπορεί να είναι το μέλλον της ανάπτυξης ιστοσελίδων. Μπορώ να πω από την εμπειρία μου ότι είναι πολύ διασκεδαστικό να γράφεις κώδικα στο Meteor, και ένα μεγάλο μέρος αυτού είναι να ξοδεύεις λιγότερο χρόνο σκεπτόμενος πώς θα αναδομήσεις τα δεδομένα σου, ώστε ο κώδικας που εκτελείται στο πρόγραμμα περιήγησης να μπορεί εύκολα να τα χειριστεί και να τα μεταβιβάσει πίσω.


Εδώ είναι ένα άρθρο για το Pyramid και το long-polling, το οποίο αποδεικνύεται ότι είναι πολύ εύκολο να ρυθμιστεί με λίγη βοήθεια από το gevent: [*TicTacToe και Long Polling με την Pyramid*](http://michael.merickel.org/2011/6/21/tictactoe-and-long-polling-with-pyramid/).
Αν ψάχνετε για την αλληλεπίδραση που αντιμετωπίζουν χρήστη, ραβδί με xml. Έχει περισσότερη υποστήριξη, κατανόηση, και τη γενική αποδοχή του παρόντος. Αν είναι εσωτερικά, θα έλεγα ότι προσκρουστήρες πρωτόκολλο είναι μια μεγάλη ιδέα.


Ίσως σε μερικά χρόνια, καθώς περισσότερα εργαλεία για να βγει να υποστηρίξει ρυθμιστικά πρωτόκολλο, στη συνέχεια, να αρχίσει να ψάχνει προς αυτή την κατεύθυνση για μια δημόσια api επένδυση. Μέχρι τότε ... [JSON](http://en.wikipedia.org/wiki/JSON) ; Από τα περαιτέρω σχόλια που έγιναν από τον συγγραφέα, που ψάχνουν για ένα Node.js ORM που λειτουργεί με δύο οδηγούς MySQL και Oracle.


Εκεί δεν φαίνεται να είναι πολλά ΝΤΥΠΑ που ταιριάζει η περιγραφή και είναι επίσης υποστηρίζονται (προειδοποίηση - βασίζονται αποκλειστικά σε λίγες αναζητήσεις του Google).


Υπάρχει μία διαπίστωσα ότι ταιριάζει με την περιγραφή αν και ακόμα φαίνεται να υποστηρίζεται ενεργά και ότι είναι knex (βλ <https://knexjs.org> ). Εντάξει, έχω μιλήσει με τους ανωτέρους μου και αποφάσισαν ότι θα μπορούσε να είναι ΟΚ ότι δεν μπορείτε να κάνετε δεξί κλικ σε ένα στοιχείο μενού και επιλέξτε «Άνοιγμα σε νέο παράθυρο». Εάν η απαίτηση αυτή πέσει, τότε δεν είμαι υποχρεωμένη να `<a>`στοιχεία για τις συνδέσεις. Με την Javascript μπορώ να μετατρέψει τα πάντα σε ένα σύνδεσμο. Έτσι, θα μπορείτε να επιλέξετε, ~~pikachoo~~ `<table>` !


Yap, είναι μια αίρεση, αλλά λειτουργεί. Πιο συγκεκριμένα, είναι η μόνη δομή που μπορώ να σκεφτώ ότι μπορεί να κάνει όλα τα ακόλουθα ταυτόχρονα:


* Κέντρο κείμενο οριζόντια και κάθετα?
* Τεντώστε στα περιεχόμενα οριζόντια και κάθετα?
* Δεν τυλίξτε στην επόμενη γραμμή, όταν τα στοιχεία αρχίζουν να υπερχείλισης.


Οτιδήποτε άλλο που μπορεί να κάνει το ίδιο μάλλον θα είναι πιο convulted ούτως ή άλλως. Και πριν κάποιος έχει την ιδέα - όχι, δεν χρειάζεται υποστήριξη των μηχανών αναζήτησης. Είναι μια εσωτερική εφαρμογή web. Θα ήταν πολύ κακό αν η Google θα μπορούσε δείκτης που ... Υπάρχουν τόσοι πολλοί παράγοντες για την απόδοση του server (CPU, RAM, I / O, μνήμη cache, τοπικές ή εξωτερική βάση δεδομένων, δικτύωση, κλπ) που δεν μπορείτε να guesstimate ακόμη και το ποσό των servers που απαιτούνται για ένα συγκεκριμένο έργο.


Θεωρώ ότι όποιος προσπαθεί να το καταλάβουν αυτό θα είναι κάτω τούτοις λάθος δρόμο, επειδή συχνά έχουν κάποια ρεαλιστική ιδέα ότι η περιοχή πρόκειται να κάνει αυτό πρόκειται να είναι εξωφρενικά δημοφιλές.


Η συμβουλή μου, μόνο την κατασκευή της εφαρμογής σας και να χρησιμοποιήσετε 1 διακομιστές, ας υποθέσουμε μπορεί να χρειαστεί ένα σύμπλεγμα διακομιστών, έτσι χτίσει το λογισμικό σας ανάλογα (η οποία με τη ΝΕΤ σημαίνει λίγο πολύ ότι δεν κάνει τίποτα διαφορετικό). Μόνο αγοράσουν περισσότερους servers όταν έχετε μια πραγματική ανάγκη, την αγορά / ενοικίαση διακομιστών σε αναμονή θα οδηγήσει πάντα να σπαταλούνται τα χρήματα, δεν είστε Amazon, ούτε το Google, δεν μπορούμε να υποθέσουμε με ακρίβεια τη μελλοντική επέκταση μέχρι να έχετε τα σημερινά στοιχεία.


Νομίζω ότι θα βρείτε 1 καλή server είναι εκπληκτικά γρήγορο και μπορεί να χειριστεί πολλούς χρήστες. Λάβετε υπόψη StackOverflow (τελευταία είδα) λειτουργεί μόνο σε 2 servers? ένα web server και ένα διακομιστή βάσης δεδομένων ... αυτό είναι όλο. <p><strong> συνολικά: </strong></p><p>τόσο το put όσο και το post μπορούν να χρησιμοποιηθούν για τη δημιουργία.</p><p>πρέπει να ρωτήσετε "σε τι εκτελείτε τη δράση;" να διακρίνετε τι πρέπει να χρησιμοποιείτε. ας υποθέσουμε ότι σχεδιάζετε ένα api για να κάνετε ερωτήσεις. εάν θέλετε να χρησιμοποιήσετε το post τότε θα το κάνετε σε μια λίστα ερωτήσεων. εάν θέλετε να χρησιμοποιήσετε το put τότε θα το κάνετε αυτό σε μια συγκεκριμένη ερώτηση.</p><p><strong> μεγάλη και οι δύο μπορούν να χρησιμοποιηθούν, έτσι ποιο πρέπει να χρησιμοποιήσω στο restful σχεδιασμό μου: </strong></p><p>δεν χρειάζεται να υποστηρίζετε τόσο το put όσο και το post.</p><p>το οποίο χρησιμοποιείται παραμένει στο χέρι σας. αλλά θυμηθείτε να χρησιμοποιήσετε το σωστό, ανάλογα με το αντικείμενο που αναφέρετε στο αίτημα.</p><p>μερικές σκέψεις:</p><ul> <li>ονομάζετε ρητά τα αντικείμενα url που δημιουργείτε ή αφήστε το διακομιστή να αποφασίσει; εάν τους ονομάσετε τότε χρησιμοποιήστε put. εάν αφήσετε τον διακομιστή να αποφασίσει στη συνέχεια, χρησιμοποιήστε το post.</li> <li>put είναι idempotent, οπότε αν put ένα αντικείμενο δύο φορές, δεν έχει καμία επίδραση. αυτή είναι μια ιδιοκτησία της νίκαιας, οπότε θα μπορούσα να χρησιμοποιήσω το put όταν ήταν δυνατόν.</li> <li>μπορείτε να ενημερώσετε ή να δημιουργήσετε έναν πόρο με put με την ίδια διεύθυνση url αντικειμένου</li> <li>με το post μπορείτε να έχετε 2 αιτήματα που εισέρχονται ταυτόχρονα για τροποποιήσεις σε μια διεύθυνση url και μπορεί να ενημερώσουν διαφορετικά μέρη του αντικειμένου.</li> </ul><p><strong> ένα παράδειγμα: </strong></p><p> <a href="https://stackoverflow.com/questions/256349/what-are-the-best-common-restful-url-verbs-and-actions/256359#256359">έγραψα τα εξής ως μέρος μιας άλλης απάντησης σχετικά με το so</a> :</p><blockquote> <p><strong> post: </strong></p> <p>χρησιμοποιείται για την τροποποίηση και την ενημέρωση ενός πόρου</p> <pre><code>post /questions/&lt;existing\_question&gt; http/1.1 host: www.example.com/ </code></pre> <p>σημειώστε ότι το ακόλουθο είναι ένα σφάλμα:</p> <pre><code>post /questions/&lt;new\_question&gt; http/1.1 host: www.example.com/ </code></pre> <p>εάν η διεύθυνση url δεν έχει δημιουργηθεί ακόμη, δεν θα πρέπει να χρησιμοποιείτε το post για να το δημιουργήσετε ενώ καθορίζετε το όνομα. αυτό θα πρέπει να έχει ως αποτέλεσμα ένα σφάλμα 'πόρος δεν βρέθηκε' επειδή το <code>&lt;new\_question&gt;</code> δεν υπάρχει ακόμα. πρέπει πρώτα να τοποθετήσετε τον πόρο <code>&lt;new\_question&gt;</code> στον διακομιστή.</p> <p>θα μπορούσατε όμως να κάνετε κάτι τέτοιο για να δημιουργήσετε πόρους χρησιμοποιώντας post:</p> <pre><code>post /questions http/1.1 host: www.example.com/ </code></pre> <p>σημειώστε ότι σε αυτήν την περίπτωση το όνομα του πόρου δεν έχει καθοριστεί, η διαδρομή url των νέων αντικειμένων θα σας επιστραφεί.</p> <p><strong> σημειωση: </strong></p> <p>χρησιμοποιείται για τη δημιουργία ενός πόρου ή για την αντικατάστασή του. ενώ ορίσετε τους πόρους νέα διεύθυνση url.</p> <p>για έναν νέο πόρο:</p> <pre><code>put /questions/&lt;new\_question&gt; http/1.1 host: www.example.com/ </code></pre> <p>για να αντικαταστήσετε μια υπάρχουσα πηγή:</p> <pre><code>put /questions/&lt;existing\_question&gt; http/1.1 host: www.example.com/ </code></pre></blockquote> Μην αμελήσετε το «σύντροφο» εργαλείο της γραμμής εντολών. Μπορείτε να το χρησιμοποιήσετε για την έξοδο του σωλήνα σε TextMate, οπότε αν μπορείτε να κάνετε τα εξής ...



```
diff file1.py file2.py | mate

```

... αυτό δεν θα είναι μόνο ανοικτή σε TextMate, αλλά είναι αρκετά έξυπνος για να ξέρει ότι ψάχνετε σε μια διαφορά και τονίζουν τις γραμμές στην οθόνη.


ενσωμάτωση SVN TextMate είναι μεγάλη? φαίνεται επίσης να έχουν δέσμες για κάποια άλλα συστήματα ελέγχου εκδόσεων, καθώς και.


Προσθέστε GetBundle να περιηγηθείτε στο αποθετήριο πακέτο. Βρήκα το πακέτο jQuery μέσα από αυτό και είναι πολύ βολικό.


Όπως άλλοι έχουν αναφερθεί, το τροχαίο το δικό σας πακέτο για συχνά χρησιμοποιούμενες αποσπάσματα είναι πολύ χρήσιμη. Αν έχετε κάποια αποσπάσματα που είναι ειδικά για ένα έργο ή πλαίσιο, ίσως να θέλετε να πρόθεμα όλα αυτά με μια κοινή επιστολή για να κρατήσει το χώρο ονομάτων τακτοποιημένο. Όχι, αυτό που κάνετε είναι μια χαρά. Μην αφήσετε αυτούς τους ανθρώπους να σας μπερδέψει.


Εάν έχετε γράψει τις διαδικτυακές υπηρεσίες με .net, στη συνέχεια, τα πληρεξούσια αναφοράς που παράγεται από .net πρόκειται να είναι αρκετά κατάλληλο. Η κατάσταση που περιγράφει (όπου θα είναι και παραγωγός και καταναλωτής) είναι η ιδανική κατάσταση.


Αν χρειαστεί να συνδεθείτε σε υπηρεσίες web που είναι *άγνωστο* κατά τη μεταγλώττιση, τότε θα θέλετε μια πιο δυναμική προσέγγιση, όπου μπορείτε να συναγάγει το «σχήμα» της υπηρεσίας web.


Αλλά ξεκινήστε με τη χρήση της αυτόματης δημιουργείται τάξη μεσολάβησης, και μην ανησυχείτε γι 'αυτό μέχρι να χτυπήσει έναν περιορισμό. Και όταν το κάνεις - επανέλθω σε στοίβα υπερχείλιση ;-) Ένας τρόπος θα ήταν να ορίσετε μια μεταβλητή περιβάλλοντος συστήματος όπως το «JAVA\_HOME» και να τις χρησιμοποιούν. 


Μπορεί να μην είναι η καλύτερη λύση, αλλά θα μπορούσε να λειτουργήσει, και αυτό είναι ό, τι άλλες εφαρμογές που απαιτούν JDK και όχι JRE (όπως CruiseControl) απαιτεί από εσάς να κάνετε όταν τα δημιούργησαν. Προσωπικά, έχω παίξει με αρκετές από τις ενσωματωμένες επιλογές σε XML-βαρύ έργο και έχουν εγκατασταθεί σε [pulldom](http://docs.python.org/lib/module-xml.dom.pulldom.html) ως η καλύτερη επιλογή για λιγότερο πολύπλοκα έγγραφα.


Ειδικά για τα μικρά απλά πράγματα, μου αρέσει το γεγονός με γνώμονα τη θεωρία της ανάλυσης αντί για τη δημιουργία μια αρμαθιά από επιστροφές κλήσεων για μια σχετικά απλή δομή. [Εδώ είναι μια καλή γρήγορη συζήτηση για το πώς να χρησιμοποιήσετε το API](http://www.prescod.net/python/pulldom.html) .


Αυτό που μου αρέσει: μπορείτε να χειριστείτε το parsing σε ένα `for`βρόχο και όχι με τη χρήση επιστροφές κλήσεων. Μπορείτε επίσης να καθυστερήσουν την πλήρη συντακτική ανάλυση (η «τραβήξει» κομμάτι) και να πάρει μόνο πρόσθετες λεπτομέρειες όταν καλείτε `expandNode()`. Αυτό ικανοποιεί γενική απαίτηση μου για «υπεύθυνη» απόδοση χωρίς να θυσιάζει την ευκολία χρήσης και την απλότητα. LinkDemand απαιτεί ουσιαστικά τον κωδικό κλήσης για να έχουν το συγκεκριμένο δικαίωμα. Η ζήτηση, από την άλλη πλευρά, απαιτεί όχι μόνο την κλήση κώδικα για να έχουν το συγκεκριμένο δικαίωμα, αλλά και τον κώδικα που ονομάζεται τον κωδικό κλήσης και τον κωδικό που ονομάζεται ότι, και ούτω καθεξής, σε όλη τη διαδρομή μέχρι τη στοίβα (ή μέχρις ότου assert βρίσκεται? βλέπε παρακάτω).


LinkDemand μπορεί να επιβληθεί σε ΚΟΕ χρόνο μεταγλώττισης, γιατί αν το πρόγραμμα μεταγλώττισης JIT χτυπά μια δήλωση που καλεί μια μέθοδο με LinkDemand, μπορεί να προσδιορίσει αμέσως αν ο κωδικός κλήσης έχει την άδεια ή όχι. Η ζήτηση πρέπει να εφαρμοστεί κατά το χρόνο εκτέλεσης κάθε φορά που μια κλήση γίνεται με τη μέθοδο, επειδή δεν είναι δυνατή κατά τη μεταγλώττιση για να ξέρετε τι θα είναι στη στοίβα κατά τη διάρκεια οποιαδήποτε πρόσκληση. Ως εκ τούτου, LinkDemand είναι πολύ πιο αποδοτική. Ωστόσο, η αντίστροφη σχέση για την εν λόγω απόδοση είναι λιγότερη ασφάλεια. Με LinkDemand, που πιστεύοντας ότι ο κωδικός κλήσης δεν πρόκειται να αφήσει ΤΗΣ κωδικός κλήσης (που μπορεί ή δεν μπορεί να έχει την άδεια) να το χρησιμοποιήσετε για φαύλους σκοπούς. (Με άλλα λόγια, έχουν εμπιστοσύνη ότι δεν υπάρχουν τρύπες ασφαλείας στον κώδικα κλήσης που καλούντες του μπορεί να εκμεταλλευτεί για να αποκτήσουν πρόσβαση έμμεσα με τη μέθοδο με την LinkDemand.) Με τη ζήτηση, ξέρετε ότι όλοι στη στοίβα έχει καμία απολύτως άδεια (σε τουλάχιστον μέχρι ενός Assert βρεθεί), οπότε δεν υπάρχει κίνδυνος από μη αξιόπιστες καλούντες.


Διεκδικούν είναι ουσιαστικά ένα βραχυκύκλωμα για την ζήτηση. Ο έλεγχος ασφαλείας που συμβαίνει με την ζήτηση σταματά εάν ο καλών στη στοίβα έχει ενεργό διεκδικήσουν (με άλλα λόγια, μόνο οι καλούντες στη στοίβα μέχρι το Assert πρέπει να έχουν την άδεια). Έτσι, όπως LinkDemand, θα πρέπει να εμπιστεύονται ότι ο κώδικας με τον Assert δεν μπορεί να αξιοποιηθεί από τους καλούντες της.


Άρνηση είναι επίσης ένα βραχυκύκλωμα για την ζήτηση, αλλά αντ 'αυτού να προβάλει μια άδεια ακυρώνει μια άδεια που θα μπορούσε να έχει ένας επισκέπτης. Θα χρησιμοποιήσετε αυτό για να βοηθήσει στην πρόληψη πιθανών κενά ασφαλείας, διασφαλίζοντας ότι δεν ξένα άδειες είναι σε ισχύ κατά τη διάρκεια μιας κλήσης που θα μπορούσε να είναι εκμεταλλεύσιμα.


PermitOnly είναι σαν Deny, εκτός αντί να αρνείται μια ειδική άδεια αρνείται κάθε δικαίωμα, εκτός από εκείνη που καθορίζεται.


InheritanceDemand, σε αντίθεση με τους άλλους, δεν σχετίζεται άμεσα με τη μέθοδο κλήσεις, αλλά λέει ότι μια κατηγορία που δεν έχει την άδεια, δεν μπορεί να κληρονομήσει από την τάξη με το InheritanceDemand. Αυτό θα μπορούσε να χρησιμοποιηθεί, για παράδειγμα, να σταματήσει να μη αξιόπιστο κώδικα από το να αποκτήσουν πρόσβαση σε προστατευόμενα μέλη της κατηγορίας που διαφορετικά θα ήταν προσβάσιμη σε απόγονος τάξεις.