gpt4 book ai didi

Java Socket 服务器基础

转载 作者:行者123 更新时间:2023-12-03 11:52:37 28 4
gpt4 key购买 nike

要实现生产级 Java 套接字服务器,我必须注意哪些潜在问题?

现在我已经使用 ServerSocket 获得了一个基本的代码结构。和 Socket核心类别 java.net包裹。服务器等待客户端并为其生成一个新线程。
我想知道这是要走的路,还是在发布代码之前我必须考虑其他问题。

以我有限的知识和经验,我想到的一些事情是:

  • 客户端断线检测,释放客户端资源。
  • 连接池,这是必要的还是我应该坚持现有的设计。
  • 服务器监控、日志记录和错误恢复等
  • 使用现成的框架,如 Apache Mina..??

  • 你的经历有什么要说的?...

    最佳答案

    我认为这取决于您的用例。但有些想法:

    现成的框架是一个很好的方法。正如您所发现的,这里有很多事情需要考虑。见下文。一些可能性(实现非常不同的策略)是 Jini(基于发现的面向恢复的计算框架)或队列系统(提供独特的客户端/服务器解耦和事务性 - 基于 JMS 和/或 AMQP)

    池化是一个主要问题。它将防止您的服务器在面对太多客户端时陷入停顿。你能用Java吗ExecutorService ?

    您如何监控此服务器?你可以使用 JMX 和 JConsole ?如果可以,我建议这是一个很好的第一步。

    如果您的服务器关闭会发生什么?您的客户是否能够自动重新连接?重试他们未完成的请求?重试请求是否是个好主意(即它是否幂等)?

    你在客户端和服务器之间传输什么?它们是序列化的 Java 类吗?如果是这样,您是否确保服务器的简单重新编译不需要客户端的重新编译(通过 serialVersionUid s)。如果您正在传输字符串并转换为字节数组(常见情况),客户端和服务器是否使用相同的字符编码?如果您对编码感到困惑,请阅读 this并且(可能)通过令人困惑的名称 file.encoding 强制执行相同的客户端/服务器编码属性(property)。

    与分布式计算一样,请考虑 Peter Deutsch 的 Fallacies of Distributed Computing .

    关于Java Socket 服务器基础,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2126574/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com