【问题标题】:Using multiple websocket connections使用多个 websocket 连接
【发布时间】:2018-08-25 14:03:35
【问题描述】:

我有一个网站,每个月都有几千次访问,而且还在不断增长。 我正在向我的网络添加新的交互式功能。

现在我正在处理一个问题,我应该为所有功能使用一个 websocket 连接,还是应该为我的应用程序的每个交互功能创建新的 websocket 连接?

我正在考虑性能问题。创建 websocket 意味着我必须将连接保存在服务器上。但是一个用户的多个连接 = 如果我为每个功能创建新连接,我必须保存的连接量要大得多。

处理这个问题的正确方法是什么?

【问题讨论】:

    标签: performance http websocket


    【解决方案1】:

    我应该为所有功能使用一个 websocket 连接还是应该 为我的每个交互功能创建新的 websocket 连接 应用程序?

    你应该只有一个 websocket 连接,没有理由使用多个 websocket。

    根据我的个人经验:

    最好的设计是使用 REST API 来处理来自客户端的操作,并将 Websocket 仅用于通知。使用 REST 将为您管理解析。

    无论如何,如果您希望您的所有应用程序都通过 websocket 协议进行通信,您可以通过套接字发送类似的东西

    msg = {
      "action": "fly",
       "data": "plane"
    }
    

    然后使用 switch case 语句在您的服务器端处理它:

    switch(msg.action){
    case 'fly': 
    serverCommand.fly(msg.data);
    break;
    // other statements
    }
    

    或者您甚至可以这样做(无需解析):

    serverCommand[msg.action](msg.data);
    

    我想说的是:你不需要打开多个websocket来解决性能问题。

    通过为同一个客户端打开多个 websocket,您的代码将难以维护,您将失去DRY 原则。

    看看那个answer,不建议打开多个socket。

    这个answer 列举了您可能希望为同一个客户端打开多个 websocket 的所有情况(注意,它说用例 not commons)

    【讨论】:

    • 但它不会变慢吗?如果我发送 json,服务器应该首先解析路由。例如,我必须发送 { route : 'chat' , data: "data"}。
    • 不是它不会比长池慢,也不会比为每个请求建立新连接慢。最常用的(性能和逻辑)是一个连接,一些预定义的数据包(json/binary)在应用程序中路由,类似于当前的 http 请求。我不知道您在 http/websockets 上使用什么,但例如我在内部使用非常相似的路由等 - 只是发送到客户端的数据不同(websocket 上的二进制文件,http 上的 json),但 websocket 上的 json 也是没有你想象的那么慢,是一个很好的开始,看看如何去做
    猜你喜欢
    • 2012-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-26
    • 2020-04-25
    • 2019-05-01
    • 2020-05-22
    相关资源
    最近更新 更多