实时推送通知golang

我想在我的Web应用程序中实现实时通知功能。 我正在关注以下示例“ https://github.com/gorilla/websocket/ 树/主/例子/聊天”。 我需要服务器(集线器)来获取消息,它需要根据某种形式的ID将这些消息推送到各个客户端。 我怎样才能做到这一点? </ p>
</ div>

展开原文

原文

I want to implement a real time notification feature in my web application. I am following this example "https://github.com/gorilla/websocket/tree/master/examples/chat". I need the server (hub) to get messages, it needs to push those messages to individual clients based on some form of ID. how can I do this?

douzi9211
douzi9211 那么您的代码在哪里?
接近 3 年之前 回复
drsl90685154
drsl90685154 有示例聊天应用程序。不确定如何仅将msg发送给某些用户。现在,味精将发送到所有连接的客户端。
接近 3 年之前 回复
douying8666
douying8666 你有没有尝试过?您能否发布一个简单,完整,可验证的示例,并说明它如何按预期工作?
接近 3 年之前 回复

1个回答

From the sample you mentioned:

    case message := <-h.broadcast:
        for client := range h.clients {
            select {
            case client.send <- message:
            default:
                close(client.send)
                delete(h.clients, client)
            }
        }
    }

This is the case where a message is broadcasted to all clients. As you can see it loops over all registered clients and sends the message to every single one of them.

To preserve this functionality we will simply add another case: send to a single client.

    case message := <-h.clientMessage:
        for client := range h.clients {
            if message.ClientID == client.ID {
                select {
                case client.send <- message:
                default:
                    close(client.send)
                    delete(h.clients, client)
                }
            }
        }
    }

This should give you an idea. The rest I leave up to you.

Note: my sample code can be optimised by e.g. using a map[clientID]Client to access the client directly.

duanguane1670
duanguane1670 要回答这个问题,必须知道您的用例和设置,您想实现什么? 等等。如果每个客户端都有一个用户名,那么连接后他们可以发送的第一件事就是他们的用户名。 由于每个连接都是在单独的goroutine中处理的,因此您可以将用户名分配给客户端。 也许只有在用户名到达时才将客户端注册到全局地图-以用户名作为密钥。 (确保对全局地图使用某种保护,或使用syncmap.Map {})。
接近 3 年之前 回复
dongsun5330
dongsun5330 确定哪个websocket属于哪个用户,以便我可以为websocket分配sessionID
接近 3 年之前 回复
duanru6816
duanru6816 SessionID(或ClientID)来自服务器,而不是客户端。 当新的客户端连接时,服务器应为其分配一个唯一的ID。 您可能会使用可以由所使用的任何服务器创建的一些SessionID。
接近 3 年之前 回复
dounan4479
dounan4479 连接时可以在Cookie中发送会话ID吗? 所以地图可以是map [SessionID] client?
接近 3 年之前 回复
douqie1852
douqie1852 创建连接后如何发送Client.ID? 我需要Client.ID来匹配会话值
接近 3 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问