【问题标题】:Separated websocket for each connected client为每个连接的客户端单独的 websocket
【发布时间】:2014-08-23 18:37:20
【问题描述】:

我计划开发 JavaScript 客户端应用程序,该应用程序将使用 websocket 连接到 Java 服务器。服务器应该处理许多连接的客户端。 经过一番阅读,我发现了 websocket 单线程。如果我想运行可能会阻止所有内容一段时间的数据库查询,这并不好。

我正在考虑为每个 JavaScript 客户端打开单独的 websocket。一个套接字正在侦听新连接,并在建立连接时创建一些唯一 ID。之后打开新的 websocket 并使用侦听器套接字将 id 发送给客户端。当客户端收到 id 时关闭第一个套接字并连接到新的。

您认为,这是一个好的解决方案吗?也许我错过了什么?

【问题讨论】:

  • 不是一个答案,只是一个想法,你考虑过 Node.js 吗?是 javascript,我知道,但你有像 Sails(sailsjs.org/#!) 这样的东西,它们使用 websockets 以 REST 方式进行 CRUD 操作。一切都只是做新的
  • Websockets 既不是单线程也不是多线程的,它们只是一个协议。它们的实现受线程限制的影响。如果您的 Java Websocket 实现只能在单个线程中使用,那么请移至另一个实现。

标签: java javascript networking websocket


【解决方案1】:

您应该在服务器上使用 NodeJS 来处理套接字 i/o。您可以通过 javascript 客户端应用程序连接到它,然后调用基于 Java 的 API。 NodeJS 是非阻塞(异步)的,您应该能够利用现有的 Javascript 技能快速构建 Node 应用程序。您甚至可以使用完整的 MEAN 堆栈来构建客户端/服务器应用程序。 http://meanjs.org/http://mean.io/#!/ 是两个受欢迎的起点。

【讨论】:

    【解决方案2】:

    Spring 4 让您有机会使用线程池。文档在这里: http://docs.spring.io/spring/docs/current/spring-framework-reference/html/websocket.html

    【讨论】:

      【解决方案3】:

      您可以使用Akka 为您管理所有并发和线程管理。或者你可以使用已经在 Akka 上构建并且很好地支持 WebSocket 的 Play Framework。使用 Play,您可以在服务器端选择 Java 和 Scala。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-05-22
        • 2021-11-25
        • 2017-01-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-08-16
        相关资源
        最近更新 更多