𝒦𝒶𝓁𝒶𝓎⛩
type waitMessage struct {
msg map[string]chan *structure.Message
mu sync.Mutex
}
func (w *waitMessage) Set(msg structure.Message) {
w.mu.Lock()
defer w.mu.Unlock()
w.msg[msg.ID] = make(chan structure.Message,1)
w.msg[msg.ID] <- msg
}
func (w *waitMessage) Get(id string) (msg structure.Message) {
w.mu.Lock()
defer w.mu.Unlock()
defer delete(w.msg,id)
msg <- w.msg[id]
return
}
Илья
его нельзя копировать
так поэтому и указатель) чтобы не колпировать а гарантированно иметь только один
𝒦𝒶𝓁𝒶𝓎⛩
разве не так?
Илья
чем плох указатель на мьютекс?
𝒦𝒶𝓁𝒶𝓎⛩
или это говно
Kirya
Chebyrash
Kirya
тем что это bad practice
Chebyrash
Илья
Chebyrash
𝒦𝒶𝓁𝒶𝓎⛩
ну вообще он будет сокрыт в структуре для других пакето поэтому можно ссылку и не использовать
Илья
обычно это случается при развитии кода, когда новые люди что-то дописывают
Илья
что не отрицает что это может быть bad practice
Илья
но я хочу узнать откуда такое мение
𝒦𝒶𝓁𝒶𝓎⛩
окей гайс у меня проблема и не понимание остались почему у меня ошибка
𝒦𝒶𝓁𝒶𝓎⛩
var TLSConnActive map[string]client_tls
type waitMessage struct {
msg map[string]chan *structure.Message
mu *sync.Mutex
}
func (w *waitMessage) Set(msg structure.Message) {
w.mu.Lock()
defer w.mu.Unlock()
w.msg[msg.ID] = make(chan structure.Message,1)
w.msg[msg.ID] <- msg
}
func (w *waitMessage) Get(id string) (msg structure.Message) {
w.mu.Lock()
defer w.mu.Unlock()
defer delete(w.msg,id)
msg <- w.msg[id]
return
}
𝒦𝒶𝓁𝒶𝓎⛩
var TLSConnActive map[string]client_tls
type waitMessage struct {
msg map[string]chan *structure.Message
mu *sync.Mutex
}
func (w *waitMessage) Set(msg structure.Message) {
w.mu.Lock()
defer w.mu.Unlock()
w.msg[msg.ID] = make(chan structure.Message,1)
w.msg[msg.ID] <- msg
}
func (w *waitMessage) Get(id string) (msg structure.Message) {
w.mu.Lock()
defer w.mu.Unlock()
defer delete(w.msg,id)
msg <- w.msg[id]
return
}
𝒦𝒶𝓁𝒶𝓎⛩
# region45/obereg_video/tls_server
tls_server/users.go:20:19: cannot use make(chan structure.Message, 1) (type chan structure.Message) as type chan *structure.Message in assignment
tls_server/users.go:21:19: cannot use msg (type structure.Message) as type *structure.Message in send
tls_server/users.go:28:9: invalid operation: msg <- w.msg[id] (send to non-chan type structure.Message)
tls_server/users.go:74:17: invalid operation: c.write <- msg (send to non-chan type *chan interface {})
tls_server/users.go:78:1: missing return at end of function
# region45/obereg_video/web_server
web_server/web_server.go:61:5: undefined: tls_conn_active
𝒦𝒶𝓁𝒶𝓎⛩
я тут в одного пишу и мне обсудить не скем даже
Kirya
убери звезду
func (w *waitMessage) Set(msg structure.Message) {
Илья
тип же разнй
Kirya
func (w waitMessage) Set(msg structure.Message) {
Илья
Kirya
хотя не, не убирай)
Илья
иначе это уже другой будет мьютекс
𝒦𝒶𝓁𝒶𝓎⛩
type waitMessage struct {
msg map[string]chan *structure.Message
mu *sync.Mutex
}
func (w *waitMessage) Set(msg structure.Message) {
w.mu.Lock()
defer w.mu.Unlock()
w.msg[msg.ID] = make(chan *structure.Message,1)
w.msg[msg.ID] <- msg
}
func (w *waitMessage) Get(id string) (msg structure.Message) {
w.mu.Lock()
defer w.mu.Unlock()
defer delete(w.msg,id)
msg <- *w.msg[id]
return
}
Kirya
я не заметил, что он тип на структуру поменял
Илья
w.msg[msg.ID] = make(chan structure.Message,1)
w.msg[msg.ID] = make(chan *structure.Message,1)
Илья
вот тут звездока нужна
Илья
и еще, ты каждывй раз заменяешь
Илья
или тут Set только для нового?
𝒦𝒶𝓁𝒶𝓎⛩
Kirya
а вот тут по моуму не нужна msg <- *w.msg[id]
Vladislav
У мьютекса все методы по указателю. Какой вообще по значению?
Kirya
𝒦𝒶𝓁𝒶𝓎⛩
𝒦𝒶𝓁𝒶𝓎⛩
для гета еще можно было бы подумать
𝒦𝒶𝓁𝒶𝓎⛩
так последняя ошибка осталась
𝒦𝒶𝓁𝒶𝓎⛩
func (w waitMessage) Get(id string) (msg *structure.Message) {
w.mu.Lock()
defer w.mu.Unlock()
defer delete(w.msg,id)
msg <- w.msg[id]
return
}
𝒦𝒶𝓁𝒶𝓎⛩
на этом msg <- w.msg[id]
Илья
https://play.golang.org/p/rQ0iCVpeXGq
Илья
вот тут вроде все норм
Vladislav
𝒦𝒶𝓁𝒶𝓎⛩
а точно
Илья
а точно
я ссылку скинал, ага) там починено)
𝒦𝒶𝓁𝒶𝓎⛩
вери сенкс
𝒦𝒶𝓁𝒶𝓎⛩
прям счастье
𝒦𝒶𝓁𝒶𝓎⛩
Самые отзывчивые посонны.
Vladimir
@Nixolay https://play.golang.org/p/D4oURfTzIoB я бы от чего-то такого отталкивался
Илья
а вообще ты что-то странное делаешь (я так и ен узнал зачем) но сделал несколько видеостриминговых сервисов, и не столкнулся с подобным, очень любопытно
Илья
𝒦𝒶𝓁𝒶𝓎⛩
Vladimir
я не уверен что идея базовая ок, но я считаю что это проблема автора идеи
𝒦𝒶𝓁𝒶𝓎⛩
Илья
это все без единого белого?
𝒦𝒶𝓁𝒶𝓎⛩
да
Илья
а как TCP сессия устанавливается?
𝒦𝒶𝓁𝒶𝓎⛩
Vladimir
кажется что топорно, но таки должно работать
Vladislav
Так. А объясните как вообще пакеты доходят без белых IP? @Nixolay
𝒦𝒶𝓁𝒶𝓎⛩
малинка режит на чанки видео и шлет мне
𝒦𝒶𝓁𝒶𝓎⛩
Anonymous
Короче говоря, обязательно нужен один комп с белым IP.
Vladislav
Ну так белый все таки есть.
𝒦𝒶𝓁𝒶𝓎⛩
подразумевается что по запросу веб морды она будет запрашивать у машины по tls
а машина отправлять нужные чанки и плейлиист
Eugeny
Кто-то вот это использовал: github.com/docker/docker/client
Eugeny
сейчас там метод client.NewEnvClient() стал деприкейтет, и как теперь это использовать не очень понятно
Aleksandr
Aleksandr
find usage по коду - находишь пример использования
Eugeny
спс!
Anonymous
https://play.golang.org/p/TvtrMfZDdEr
подскажите, почему так работает? и как создать такого бесконечного слушателя правильно?
Andrei 🦉
зачем ты несколько раз вытаскиваешь значение из канала в одной и той же итерации?
Andrei 🦉
https://play.golang.org/p/taYj__NQ08m