Websocket 处理不同的数据 - 不同的端点?

Posted

技术标签:

【中文标题】Websocket 处理不同的数据 - 不同的端点?【英文标题】:Websocket dealing with different data - different endpoints? 【发布时间】:2019-01-22 08:05:24 【问题描述】:

我对 websockets 以及如何区分它发送的不同数据感到好奇。我也无法在网上找到任何清晰的东西,除非我错过了一些盯着我看的东西。

我有一个 websocket,握手建立了连接。 ws 的目的是提供实时足球比分和实时表格。

因此,如果它是一个休息 API,我可能会有 2 个端点,/live-scores/table。我的反应组件对不同的数据感兴趣,所以我想知道网络套接字中是否有等效的端点?或者你如何区分不同的数据?每条数据都应该有一个单独的网络套接字吗?

另外,请记住,除了实时比分和表格之外,还会有超过 2 条数据,所以我认为每个不同的 ws 将是矫枉过正的。

谁能指出我正确的方向或在这里提供答案?

TLDR 您是为每组不同的数据创建一个 websocket(因为需要更好的描述方式)还是只有一个 websocket,如果有,什么是客户端的最佳方式来区分它正在接收什么样的数据?

如果这个问题没有意义,请告诉我,我会尽量让问题更清楚。

我的起始代码在这里:

import sockjs from 'sockjs';

const ws = sockjs.createServer(
    sockjs_url: 'http://cdn.jsdelivr.net/sockjs/1.0.1/sockjs.min.js',
);

ws.on('connection', connection => 
    connection.on('data', m => 
        const message = m ? JSON.parse(m) : ;
        if (message.type === 'register') 
            connection.write(
                JSON.stringify(
                    address: message.address,
                    body: 
                        message: 'Hello World!',
                    ,
                )
            );
        
    );
);
export default ws;

【问题讨论】:

您已经在使用message.type 来区分多种类型的消息。只需使用它来区分分数更新和表格更新! 好的,很酷,那么message.type 应该使用什么?谢谢! 【参考方案1】:

你不应该需要使用多个套接字来做你想做的事。实际上,您可能想要这样做的正当理由只有几个(请参阅Multiple websocket connections)。

您通过套接字发送 JSON 有效负载并使用该对象的属性来确定数据上下文的方法是完全可以接受的,但是您可能需要对 publish-subscribe 消息传递模式进行一些研究,看看它是否会更好地满足您的需求。由于您使用的是 sockjs,因此您需要查看 sockjs-rooms 以启用此类功能。

【讨论】:

以上是关于Websocket 处理不同的数据 - 不同的端点?的主要内容,如果未能解决你的问题,请参考以下文章

websocket和HTTP使用不同端口可以吗

不同的 WebSocket“onmessage”处理程序取决于屏幕

websocket[tornado] 的单个实例可以处理不同的请求吗?

AWS API Gateway Websocket UnknownError

netty系列之:分离websocket处理器

我想在 Angular 2 中根据不同的端点数据显示不同的组件