java - 如何创建自定义二进制协议(protocol)服务器?

标签 java tcp binary protocols

请告知创建自定义二进制协议(protocol)服务器的最佳解决方案是什么。服务器应通过 TCP/IP 上的二进制协议(protocol)接受来自多个设备的通信。

是否有任何现有的服务器/框架解决方案可用? IE。 Node.js适合解决这个问题吗?首选解决方案是面向 Java 的。

提前致谢!

更新:需要使用二进制协议(protocol)来减少通信数据量。协议(protocol)的任何文本格式都可能过于冗长。此外,设备的协议(protocol)已经指定。

最佳答案

我前段时间实现了这样的事情。我为此使用了两个标准 Java API:

  1. java.net 包:java.net.ServerSocket 和 java.net.Socket 应该能够满足您的大部分需求。
  2. java.concurrency 包:对于从 ServerSocket 实例接受的每个新连接 Socket,您可能希望将此连接 Socket 的处理移至另一个线程,并使用阻塞 ServerSocket.accept 开始监听下一个连接() 方法——一种生产者-消费者模式的实现。可以通过将新连接的 Socket 发布到队列中来完成,然后将其用于提供给线程池,并且该线程池中的每个线程负责实际的连接处理。

注意:有时,当您不确定客户端和服务器之间会发生哪种 session 模式(例如,如果希望它们首先通过 TCP/IP 发送数据),则从以下位置读取数据确实有意义一个 Socket 并在不同的线程中将数据写入同一个 Socket 中。

关于java - 如何创建自定义二进制协议(protocol)服务器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17980847/

相关文章:

Python:如何打印字节?

javascript - 使用 node.js 从 Google Drive 读取二进制文件

java - 使用 Java 在 MongoDB 中创建集合

java - 我该如何修复这个 "not quite synchronized"消费者生产者示例

java - 如何从 ICompilationUnit 获取 IEditorPart

java - 如何处理和解码来自 TCP 服务器的传入字节

java - 用于游戏编程的 C 与 Java

sockets - 如何在 Corona SDK Lua 中运行阻塞操作?

c - 套接字编程: sending and receiving different data to different clients in C

c - C语言如何将2字节二进制转换为整数