1
在golang我需要創建一個websocket連接並跟蹤所有連接用戶,廣播或用戶到用戶的通信等。 作爲每個用戶的標識符,我打算使用該連接的內存地址。 這種方法有什麼缺點嗎?在我看來,這不應該產生任何問題,因爲每個套接字都是在websocket連接結束時被銷燬的請求端的上下文中創建的,並且只要連接存在,程序就應該保留所有這些存儲器地址。在上下文中使用指針地址並用作唯一標識符是否安全?
var Socket *socket //i did this in order Socket to be ready without init out of the box just like Mutex //check init function to see how i handle this
type socket struct {
connectedUsers []*User
}
type User struct {
Id unsafe.Pointer
Conn *websocket.Conn
}
func init() {
var sock = new(socket)
sock.connectedUsers = make([]*User, 0)
Socket = sock
}
//NewConnection add a new *User into connected users list
func (*socket) NewConnection(sock *websocket.Conn) {
usr:=new(User)
usr.Conn=sock
usr.Id=unsafe.Pointer(usr)
Socket.connectedUsers=append(Socket.connectedUsers,usr)
}
//then i can do something like
//theOtherUser:=*(*websocket.Conn)(usr.Id)//this will give the connection of the user (hopefully)
怎麼樣?是否可以包含一些代碼來證明你的意思? – Nevermore
@Nevermore我加了個例子 – nikoss
好吧,有點。使用指針作爲ID是可以的,但請不要使用不安全:包不安全是不安全的,甚至會使_less_保證而不是簡單的指針。 – Volker