我有三个程序(A,B和C)。程序C具有一个tcp套接字服务器,用于等待特定端口上的连接。通常,程序A打开到程序C的套接字连接,发送数据,然后关闭套接字,再次打开套接字,再次发送数据,关闭它,等等。问题是,每次在C上打开套接字时,都会进行很多初始化是在程序C上完成的,因此套接字的这种持续打开和关闭正在减慢A的速度。我没有能力更改程序A,因此无法更改A来使程序运行得更快。
但是,我想做的是将套接字连接从A转发到新程序B,然后将数据转发到程序C。然后B可以只打开一个套接字到C,然后打开和关闭从A传入的连接,就像需要。我正在寻找程序B来执行以下操作:
open socket to C
send request to C to do the time-consuming initialization on C (just this once)
while true
listen for socket connection from A
until socket from A is closed
read data from A, write same data to C
read data from C, write same data to A
这不是一个复杂的程序,我会在必要时编写它,但是我希望有人使用现有的实用程序提供一个简单而聪明的解决方案,或者希望是否有一些现有的实用程序能够在更复杂的类似情况下进行此类操作。
与socat
:
mkfifo pipe &&
<pipe socat tcp-listen:"$portB",reuseaddr,fork,bind=localhost - |
socat - tcp:localhost:"$portC" >pipe
甚至更好(避免进行进程间通信的fifo和额外的层):
socat "tcp:localhost:$portC" \
"exec:\"socat - tcp-listen:$portB,reuseaddr,fork,bind=localhost\",nofork"
由于nofork
,第二个socat
将以其stdin和stdout直接连接到C的套接字运行。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句