Websocket 如何通过公共websock频道发布私人信息?

Websocket 如何通过公共websock频道发布私人信息?,websocket,Websocket,给定类似“”的URL,我想发送两种类型的邮件: 与广播一样,所有连接到websocket的人都将收到公共消息。e、 g.当前市场价格 私人消息,仅1人将收到,例如当前用户的余额 我知道很多交易所都实施了这个,有人能给我一个线索吗 ----------------------产地来源问题如下: 今天我发现了一个非常有趣的网站,它通过websocket API发送个人信息,这个API看起来像一个公共渠道 我的问题是:如何做到这一点?websocket服务器可以通过某种秘密方法发送私人信息吗? 以下是

给定类似“”的URL,我想发送两种类型的邮件:

  • 与广播一样,所有连接到websocket的人都将收到公共消息。e、 g.当前市场价格

  • 私人消息,仅1人将收到,例如当前用户的余额

  • 我知道很多交易所都实施了这个,有人能给我一个线索吗

    ----------------------产地来源问题如下:

    今天我发现了一个非常有趣的网站,它通过websocket API发送个人信息,这个API看起来像一个公共渠道

    我的问题是:如何做到这一点?websocket服务器可以通过某种秘密方法发送私人信息吗? 以下是websocket频道的详细信息:

    概述:

    Request URL: wss://wbs.mxc.com/socket.io/?EIO=3&transport=websocket
    Request Method: GET
    Status Code: 101 Switching Protocols
    
    响应标题:

    HTTP/1.1 101 Switching Protocols
    Date: Tue, 03 Sep 2019 06:13:55 GMT
    Connection: upgrade
    Server: nginx
    upgrade: websocket
    sec-websocket-accept: xr3/mMY887Utp3cnZdf37ycDWAc=
    sec-websocket-extensions: permessage-deflate
    
    GET wss://wbs.mxc.com/socket.io/?EIO=3&transport=websocket HTTP/1.1
    Host: wbs.mxc.com
    Connection: Upgrade
    Pragma: no-cache
    Cache-Control: no-cache
    Upgrade: websocket
    Origin: https://www.mxc.com
    Sec-WebSocket-Version: 13
    User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36
    Accept-Encoding: gzip, deflate, br
    Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,zh-TW;q=0.7
    Sec-WebSocket-Key: oYmhqikSoGD8AgdqrMj0XQ==
    Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits
    
    请求标头:

    HTTP/1.1 101 Switching Protocols
    Date: Tue, 03 Sep 2019 06:13:55 GMT
    Connection: upgrade
    Server: nginx
    upgrade: websocket
    sec-websocket-accept: xr3/mMY887Utp3cnZdf37ycDWAc=
    sec-websocket-extensions: permessage-deflate
    
    GET wss://wbs.mxc.com/socket.io/?EIO=3&transport=websocket HTTP/1.1
    Host: wbs.mxc.com
    Connection: Upgrade
    Pragma: no-cache
    Cache-Control: no-cache
    Upgrade: websocket
    Origin: https://www.mxc.com
    Sec-WebSocket-Version: 13
    User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36
    Accept-Encoding: gzip, deflate, br
    Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,zh-TW;q=0.7
    Sec-WebSocket-Key: oYmhqikSoGD8AgdqrMj0XQ==
    Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits
    
    这是一个关于加密交换的网站

    客户端用户可以接收公共信息(加密价格等),登录用户可以通过相同的URL接收其帐户余额

    那么如何做到这一点呢

    我在其他一些网站上也看到过这种东西,比如huobi.pro,(
    EIO=3…
    )这是一种websocket客户端框架吗


    非常感谢

    首先,重要的是要理解WebSocket连接不是一个愚蠢的广播。
    情况恰恰相反:从技术上讲,每个连接客户机从一开始就拥有自己的(私有)到服务器的WebSocket连接,而服务器端又使用唯一的连接id引用该连接

    记住这一点,剩下的就很容易解释了:服务器现在可以使用常用的方法进一步识别客户机。在这样的市场上,这通常只需登录即可实现。之后,服务器知道具有唯一ID的WebSocket连接属于您的特定用户帐户。从这一点开始,它不仅会将“公共”信息推送到您的WebSocket连接,还会将仅用于您帐户的私人信息推送到您的WebSocket连接

    有这样的框架,但如果只发送两种类型的消息,一种是针对所有用户的,另一种是针对特定用户的,您可能不需要,或者至少不需要非常复杂的消息。
    然而,事实上非常受欢迎并且在这里也是一个很好的搭配的是。io为您提供了一个方便的API来使用WebSocket,并支持私人消息和智能广播。举例说明,考虑下面的伪代码:

    const io=require('socket.io')();
    io.on('连接',(套接字)=>{
    //此时,您已经可以通过socket.id引用唯一的已连接客户端
    //然而,目前我们对独特的客户不感兴趣
    //只想向所有人发送“公共”信息:
    emit('每个人都会收到的公共消息');
    socket.on('login',loginda=>{
    //显然,您将针对数据库进行身份验证,而且要复杂得多;-)
    if(loginda.name==“Rose”&&loginda.pass==“password”){
    emit('你好,罗斯,这是你的私人消息');
    //既然你现在已经登录了,也许还可以检查一下任何类型的东西
    //数据库集合的一部分,并在有更新时通知您
    OrdersCollection.find({'owner':'Rose'})。观察({
    已更改:UpdateOrder=>{
    emit('您向我们下的订单之一刚刚更新。这是当前订单:',UpdateOrder);
    }
    })
    }
    });
    });
    
    为什么不能使用Cookie?您当前的WebSocket是用什么语言和框架编写的?我猜您正在寻找这个@MichaelWarner我正在使用Ruby和Rails。