hello
from some books, i learn that after sending the data,the socket port should be closed,but consider my scinario:
my project is consisted of two subsystem,let me call them:sysA and sysB,they communicate with each other through socket,both of them open a server socket ,the port is special and dedicated to each other,no other client use it.
under such situation,i think keeping the socket connection opening is a good solution,it is not necessay to close it at end of each communication and reopen it at the beginning of next communication,because the opening and closing the socket frequently will make the performance a bit lower.
what is your opinion?
-
which solution is more performent? (2 messages)
- Posted by: zhebin cong
- Posted on: May 07 2004 22:54 EDT
Threaded Messages (2)
- which solution is more performent? by Pedro Igor on May 08 2004 08:02 EDT
- which solution is more performent? by Joe Attardi on May 18 2004 09:30 EDT
-
which solution is more performent?[ Go to top ]
- Posted by: Pedro Igor
- Posted on: May 08 2004 08:02 EDT
- in response to zhebin cong
The ssh service daemon(sshd) make use of this aproach. When both server and client wants to disconnect, the server sends a exit status to the client and both sides exit. Maybe you can compare your system needs with the ssh aproach. -
which solution is more performent?[ Go to top ]
- Posted by: Joe Attardi
- Posted on: May 18 2004 09:30 EDT
- in response to zhebin cong
Hi Zhebin,
In this case, you want your two subsystems to be always connected, and the socket connection is dedicated to each other.
Your solution is the best one - leaving the socket always open. Creating and tearing down socket connections can be very expensive operations - this is why a lot of Web servers use HTTP Keepalive to improve the performance of an HTTP session.
Once you initially make the socket connection between the two subsystems, you don't really incur an extra performance penalty in terms of CPU cycles or speed. Your resource usage is minimal (a socket descriptor on each subsystem, input/output streams) - only a handful of objects.
Another possible option to squeeze some better performance (it may or may not be noticeable) is to use UDP instead of TCP. A TCP connection has some extra overhead (acknowledgement packets, retransmission of dropped packets ,etc.) The drawback with UDP, of course, is that the delivery of packets is not guaranteed. Is the socket connection between the two subsystems for streaming of some kind of live data? In this case, UDP is a good option because who cares if we miss a few packets here and there, there are always updates coming down the wire.
Of course, if it's more of a command-response type connection, UDP isn't so good because you probably want to ensure each command and response gets to its destination.
But the bottom line is: If this socket connection is dedicated for the two subsystems, leaving it always open is a better idea than constantly opening and closing.
Hope this helps! Let me know if you want me to clarify anything.
Joe