Browse Source

Create a pool for the type checking

gek/new-load-tests
Gabe Kangas 4 years ago
parent
commit
a393e213aa
  1. 20
      core/chat/server.go

20
core/chat/server.go

@ -24,6 +24,14 @@ var _server *Server @@ -24,6 +24,14 @@ var _server *Server
// a map of user IDs and when they last were active.
var _lastSeenCache = sync.Map{}
type typeCheck struct {
Type string `json:"type"`
}
var _typeCheckPool = sync.Pool{
New: func() interface{} { return new(typeCheck) },
}
// Server represents an instance of the chat server.
type Server struct {
seq uint
@ -284,14 +292,14 @@ func (s *Server) DisconnectUser(userID string) { @@ -284,14 +292,14 @@ func (s *Server) DisconnectUser(userID string) {
}
func (s *Server) eventReceived(event chatClientEvent) {
var typecheck map[string]interface{}
if err := json.Unmarshal(event.data, &typecheck); err != nil {
tc := _typeCheckPool.Get().(*typeCheck)
defer _typeCheckPool.Put(tc)
if err := json.Unmarshal(event.data, tc); err != nil {
log.Debugln(err)
}
eventType := typecheck["type"]
switch eventType {
switch tc.Type {
case events.MessageSent:
s.userMessageSent(event)
@ -299,7 +307,7 @@ func (s *Server) eventReceived(event chatClientEvent) { @@ -299,7 +307,7 @@ func (s *Server) eventReceived(event chatClientEvent) {
s.userNameChanged(event)
default:
log.Debugln(eventType, "event not found:", typecheck)
log.Debugln(tc.Type, "event not found:", tc)
}
}

Loading…
Cancel
Save