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) 
+0

怎麼樣?是否可以包含一些代碼來證明你的意思? – Nevermore

+0

@Nevermore我加了個例子 – nikoss

+1

好吧,有點。使用指針作爲ID是可以的,但請不要使用不安全:包不安全是不安全的,甚至會使_less_保證而不是簡單的指針。 – Volker

回答

0
到底我不喜歡的東西 this

和它的作品真的很好

相關問題