-
-
Notifications
You must be signed in to change notification settings - Fork 2.5k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
add websocket client stress test, passed and update the vendors (this…
- Loading branch information
Showing
29 changed files
with
1,393 additions
and
678 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,85 @@ | ||
package main | ||
|
||
import ( | ||
"bufio" | ||
"fmt" | ||
"math/rand" | ||
"os" | ||
"sync" | ||
"time" | ||
|
||
"github.com/kataras/iris/websocket" | ||
) | ||
|
||
var ( | ||
url = "ws://localhost:8080/socket" | ||
f *os.File | ||
) | ||
|
||
const totalClients = 1200 | ||
|
||
func main() { | ||
var err error | ||
f, err = os.Open("./test.data") | ||
if err != nil { | ||
panic(err) | ||
} | ||
defer f.Close() | ||
|
||
wg := new(sync.WaitGroup) | ||
for i := 0; i < totalClients/2; i++ { | ||
wg.Add(1) | ||
go connect(wg, 5*time.Second) | ||
} | ||
|
||
for i := 0; i < totalClients/2; i++ { | ||
wg.Add(1) | ||
waitTime := time.Duration(rand.Intn(10)) * time.Millisecond | ||
time.Sleep(waitTime) | ||
go connect(wg, 10*time.Second+waitTime) | ||
} | ||
|
||
wg.Wait() | ||
fmt.Println("ALL OK.") | ||
time.Sleep(5 * time.Second) | ||
} | ||
|
||
func connect(wg *sync.WaitGroup, alive time.Duration) { | ||
|
||
c, err := websocket.Dial(url, websocket.ConnectionConfig{}) | ||
if err != nil { | ||
panic(err) | ||
} | ||
|
||
c.OnError(func(err error) { | ||
fmt.Printf("error: %v", err) | ||
}) | ||
|
||
disconnected := false | ||
c.OnDisconnect(func() { | ||
fmt.Printf("I am disconnected after [%s].\n", alive) | ||
disconnected = true | ||
}) | ||
|
||
c.On("chat", func(message string) { | ||
fmt.Printf("\n%s\n", message) | ||
}) | ||
|
||
go func() { | ||
time.Sleep(alive) | ||
if err := c.Disconnect(); err != nil { | ||
panic(err) | ||
} | ||
|
||
wg.Done() | ||
}() | ||
|
||
scanner := bufio.NewScanner(f) | ||
for !disconnected { | ||
if !scanner.Scan() || scanner.Err() != nil { | ||
break | ||
} | ||
|
||
c.Emit("chat", scanner.Text()) | ||
} | ||
} |
19 changes: 19 additions & 0 deletions
19
_examples/websocket/go-client-stress-test/client/test.data
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
Σκουπίζει τη τι αρματωσιά ευρυδίκης κι αποδεχθεί αν εχτύπεσεν. Οι το ζητούσε δεκτικό αφήσουν μπράτσο βλ απ. Φυγή τι έτσι εκ πλάι αυτή θεός ας αδάμ. Αποβαίνει να τι βλ κατάγεται γεγονότος. Μπουφάν ξάπλωσε σχέσεις βλ ας να να. Υποδηλώσει τα τι κι σιδερένιων εξελικτική ως συγκράτησε παιγνιώδης. Προφανώς μου μία σύγχρονο ιστορίας. | ||
|
||
Νερά ψηλά λύπη αφτί ας ψυχή τι λόγω. Του φίλ διά γεφυρώνει ανίχνευση διεύρυνση. Όλο μήπως τομέα πρώτο στους δις νόημα εάν του. Παιδείας ομορφιάς καλύτερα ας με. Παραγωγή προθέαση σε κουλιζάρ παραπάνω υπ. Πώς δικούς στήθος πόντου πως θέατρο θέληση σίδερο. Σιδερένια διηγήσεων ναι δύο επέμβασης καθ ώρα ιδιαίτερα βεβαιώνει θεωρείται. Βλ νερο τη να ύλης μτφρ τέλη. Ας ρόλων τη χώρων υπ αφορά είδος είπεν. | ||
|
||
Ου πάρκαρε παιδικό μάλιστα ιι. Σκοτωθεί απαγωγής ανάλυσης άνθρωποι ιι τραγικού οι. Αναπνοή επέλεξα πομπούς εφ δράσεις να. Νε υλικό ας ως ευρήκ νόρμα ου. Ιι εμάζεψα δεύτερη αλλαγές ατ τα σύζευξη επίπεδο. Συγγραφέα νεότερους κατέγραψε ζωή διά υφολογική. Που απέσ νου στον άρα είδη σούκ νικά ήρωά. Το κανένα τι ιι γωνίας να δεσμός. | ||
|
||
Ροή ρευστότητα στο έλα παραμυθιού διαδικασία ειδυλλιακή. Ελλάδας σύμβαση δε με πομπούς εμφανής. Ατ ως εποχή τρόπο εβγάλ αυτές πεδίο γωνία. Των άνθρωπος μπανιέρα ροζ υφίστατο φίλ. Εδώ ροζ πήρε τύπο πια μην δική. Έζησαν μάλλον ως με δε τρόπου. Παράλληλη από αδιόρατης επισκίασε άρα rites ναι. Πολιτισμού του ειδολογική νέο συνάντησης στα ταυτότητας δημοσίευση. | ||
|
||
Παραλλαγές τόζλουτζας κι ατ συγγραφέας παρωδώντας συνείδησης να. Συν χρειάζεται εξελικτική συνιστώσες αναβόσβησε παιγνιώδης έξω εμφανίζουν. Περίτεχνο κοινωνίας ρου του ηθελημένα την σύγχρονων ζώγ. Συν στα υποτίθεται εις ανακάλυψης νέο κατασκευές. Τεκμήρια επίλογοι περίοδος σου εξω στα αγγελίες ποικίλες. Γι παραμένει συμβάντος ακολούθως δε κι να υπόστρωμα. Τη θάρρος θεϊκού να μικρές αηδίες σοφίας πρέπει. Γιατί ευρήκ σοφία αίσια και όνομά για επικό την. Έστειλεν οι σύνδρομο αληθινής κι με εξυπνάδα υπέδειξε αδειάσει. | ||
|
||
Πω δε φοβηθώ ας σε μιχάλη ακουσε όμορφα εφόδιο. Ελέγχοντας διαχείριση όλα αναπαράγει συν στα εάν. Κεί τραγουδιών μαθητεύσει την επισημάνει οικολογικά παραμυθικό ζέη στο. Λαϊκού ατότες εξω μια την ακούμε. Δεδομένου ας τα αγαπημένο παρουσίας διαθέσεων αν. Αντίστροφα ρεαλιστικό περιπέτεια διαδικασία άρα ατο ημερολόγια. | ||
|
||
Άντλησης νεόφερτο μοναδικό εκ ιι δυναμική μηνύματα. Συγγραφική προ έξω την περιπέτεια εγχειρίδια μαθητεύσει εκφέρονται. Εάν δεν μαρί άρα ήχοι ατο κόρη. Εν ας επομένως κινήματα άνθρωποι. Ου δάσος τι υπ γιατί πόνος όποια αυτός. Δεύτερη δέχεται το χρονικά αχιλλέα μη. Τα απαγωγή ου ακριβώς θηλάσει. Οι παραγωγή τα παιγνίδι απ παιδικών τρομάξει. | ||
|
||
Ιστορικά ανθρώπου οπλιστεί εκκίνηση στα μερ χάσματος αργότερα. Κοινωνία επιδίωξη κοιμάται πια πειστική διά πιο απ΄. Εκ οι εύκολα γονείς σύζυγο κι πολλοί με φυσερά. Εκ τα μέτωπο το κύματα δηλαδή όμορφα φανερό πράγμα. Νωρίτερα ομορφιάς διαμέσου ζώγ ανέδειξε υπό πρόσμιξη. Επιδιώκει τις όλη μια βεβαιώνει μελετηθεί μία. Παρατηρεί υιοθετούν ροή ανθρώπινη τον επέστρεψε κατασκευή πια. | ||
|
||
Αναπνοή επί νυχτικά εις σηκώνει τράβηξε γερανού χάλκενα. Αν αδειάσει ποικίλες νε δυναμικό. Όπως δύο αυτό ένα δέβα αυτο από νέοι πάλι. Έως υποβάλλουν αποτέλεσμα εξω σην συγχρονική μεσημεριού. Όλα νέο νου εναντίον σκέπαζαν τον διδάσκει σπουδαίο. Ακόμη πι ως έργου σοφοί δε τα. Σώματος απόλυτα εν τέτοιες διάφορα ατ πι τι. Ως ατ κοινού έμαθες πλάκες. Τα τη συνοχή έκρυβε οποίος σταθεί παίκτη. | ||
|
||
Με σύγχρονης βρίσκεται αποτέλεσε πα τα ελληνικής. Ανακοίνωσή τις στο ουσιαστικό πολλαπλούς τις φιλολογική σου. Φιλολογική να κι κι μορφολογία μυθοπλασία πω. Τυχόν βαθιά ου λόγια έχουν να. Μικρούς έχοντας με χαμένης τη μη. Μοντέλα συνήθως επί θεωρίες χρονικά όλα χάλκενα. Διήγημα θεωρίας ατ βαγγέλη βλ νε αρ ευτελής μαγείας. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,64 @@ | ||
package main | ||
|
||
import ( | ||
"fmt" | ||
"os" | ||
"sync/atomic" | ||
"time" | ||
|
||
"github.com/kataras/iris" | ||
"github.com/kataras/iris/websocket" | ||
) | ||
|
||
const totalClients = 1200 | ||
|
||
func main() { | ||
app := iris.New() | ||
|
||
// websocket.Config{PingPeriod: ((60 * time.Second) * 9) / 10} | ||
ws := websocket.New(websocket.Config{}) | ||
ws.OnConnection(handleConnection) | ||
app.Get("/socket", ws.Handler()) | ||
|
||
go func() { | ||
t := time.NewTicker(2 * time.Second) | ||
for { | ||
<-t.C | ||
|
||
conns := ws.GetConnections() | ||
for _, conn := range conns { | ||
// fmt.Println(conn.ID()) | ||
// Do nothing. | ||
_ = conn | ||
} | ||
|
||
if atomic.LoadUint64(&count) == totalClients { | ||
fmt.Println("ALL CLIENTS DISCONNECTED SUCCESSFULLY.") | ||
t.Stop() | ||
os.Exit(0) | ||
return | ||
} | ||
} | ||
}() | ||
|
||
app.Run(iris.Addr(":8080")) | ||
} | ||
|
||
func handleConnection(c websocket.Connection) { | ||
c.OnError(func(err error) { handleErr(c, err) }) | ||
c.OnDisconnect(func() { handleDisconnect(c) }) | ||
c.On("chat", func(message string) { | ||
c.To(websocket.Broadcast).Emit("chat", c.ID()+": "+message) | ||
}) | ||
} | ||
|
||
var count uint64 | ||
|
||
func handleDisconnect(c websocket.Connection) { | ||
atomic.AddUint64(&count, 1) | ||
fmt.Printf("client [%s] disconnected!\n", c.ID()) | ||
} | ||
|
||
func handleErr(c websocket.Connection, err error) { | ||
fmt.Printf("client [%s] errored: %v\n", c.ID(), err) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.