【问题标题】:Java WebSocket and TCP Socket communicationJava WebSocket 和 TCP Socket 通信
【发布时间】:2014-11-05 02:38:17
【问题描述】:

我需要开发网络应用程序。此应用程序将为某些应用程序服务器实现基于 Web 的终端(此项目将提供替代的瘦和跨平台的基于 Web 的客户端,而不是仅 Windows 的二进制客户端)。 我理解使用 ajax 与 app.server 通信是不正确的,因为我们需要更实时。所以我们需要比 ajax 更异步的东西。我打算使用网络套接字。

但我的应用程序也需要与远程应用程序服务器通信。现有的实现基于 TCP。所以我们必须使用这个现有的协议规范。我可以想象当接受新的 web-socket 连接时如何连接到远程服务器。而且我知道 web-socket 实现很简单,因为它是事件驱动的。但是我知道经典的 java 套接字是基于流的,我必须从流中读取,并且我的代码将被阻塞,直到一些数据从远程端出现。因此代码将无法响应其他事件。

我看到了一种使其正确的方法 - 将线程用于经典套接字。但我不知道它是否适用于 web java 应用程序。请以任何方式建议我。

【问题讨论】:

  • “事件驱动”或“基于流”(如您所想;我会说“事件驱动”与“阻塞”)与协议无关;它们与您使用的库有关。
  • 我忘了说。可能很重要。每个 websocket 连接都有自己的 tcp socket 用于远程服务器通信。这是当前应用服务器实现的要求。
  • 现在我认为它必须是 tcp socket 的一些二进制协议和 websocket 基于 text(json) 的协议之间的双向转换器。所以我想知道什么是最简单和最正确的方法。

标签: java sockets tcp websocket


【解决方案1】:

Java 有多种异步通信方式,这样不同的连接就不会相互阻塞。当前的标准是 Java 的 Non-blocking IO framework,它以 Channel 的形式抽象每个网络连接,并将它们分组到 Selector 下,找出哪些通道当前准备好接收数据或哪些刚刚接收到的数据可以由您的代码。

该框架使用单独的后台线程处理实际的 IO,因此写入和读取套接字几乎是即时的。

【讨论】:

    猜你喜欢
    • 2015-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-24
    • 1970-01-01
    • 2018-06-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多