0

问题过于复杂。一个非常直接的解决方案是按照 Uwe 和 David 的建议重新设计:

(1) 工人应用程序。(2) 长时间运行的 TcpServer,等待客户端并调用 worker (3) 客户端。

=========================

我想构建一个SampleApp功能为:

  • 启动时,它会检查是否已经在SampleApp运行;
  • 如果不是,它启动 a TcpServer, a TcpClient,将某个命令从它传递TcpClient到它的TcpServer,完成工作,关闭TcpServer,然后退出;
  • 如果是,它启动 a TcpClient,将命令传递给另一个TcpServer并退出。(其他人TcpServer会做这项工作。)
  • SampleApp当第一个仍在运行时,可能有多个启动。

我不知道如何实际解决这个问题,例如:

  1. 从哪个架构开始?(著名的 OmniThreadLibrary 似乎处理基于线程的并发,而不是基于操作系统进程的并发。)
  2. 没有SampleApp跑步。两个SampleApp(几乎)同时启动。如何保证只启动一个 TcpServer?(没有“全局列表”来注册传入的“玩家”。)
  3. 有一个SampleApp正在运行。如果 2nd 检测到 1st 的 mutex 并因此决定成为 TcpClient,但 1st 停止其 TcpServer 并退出,如何处理?

任何见解表示赞赏!

4

1 回答 1

0

如果您想主要使用它在单台计算机上的进程之间进行通信(在单个用户会话中),您应该喜欢 ActiveX 自动化对象。创建一个使用 LocalServer 的 COM 对象将为您启动和停止“服务器”进程。

在此处查看更多信息:http: //docwiki.embarcadero.com/RADStudio/XE4/en/Creating_an_Active_Server_Object

如果您坚持使用TTcpServer,当两个进程(几乎)同时启动时,仍然只允许一个绑定到某个TCP端口,另一个在TTcpServer上调用Listen时会出现异常。

于 2013-08-28T16:04:06.267 回答