1 / 13

TCP Sockets in Perl: An Overview of Client/Server and Multithreading Implementations

This document discusses TCP socket programming in Perl, focusing on client/server architecture and multithreading techniques. It explores the use of the Socket package for creating TCP connections, binding, listening, and accepting connections. The implementation of a daytime server and client is detailed, showcasing code examples. Key issues are highlighted, such as handling multiple requests, performance challenges, and potential deadlocks in a multithreaded environment. Alternative implementations using thread pooling are also presented, providing insights into efficient resource management.

khoi
Télécharger la présentation

TCP Sockets in Perl: An Overview of Client/Server and Multithreading Implementations

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Using TCP sockets in Perl Created by M Bateman, A Ruddle & C Allison As part of the TCP View project

  2. Overview • TCP socket • Client/Server • Multithread server • Thread pooling server • Alternate thread pooling server

  3. TCP Provides • Process to process communication • Use tuple of IP address & port • Reliable • In order • Socket is one end-point of a two way connection link

  4. TCP Socket Operations

  5. TCP in Perl • Implemented in Socket package • Provides abstractions over • Socket and connect operations • Bind, listen & accept • Remember to close the socket at the end

  6. Daytime server use Socket; $port = 13; $proto = getprotobyname (‘tcp’); socket (SERVER, PF_INET, SOCK_STREAM, $proto); setsockopt (Server, SOL_SOCKET, SO_REUSEADDR, pack (“1”, 1)); bind (SEVER, socket_in ($port, INADDR_ANY)) listen (SERVER, SOMAXCONN); for (; $paddr = accept (CLIENT, SERVER); close CLIENT) { print (CLIENT scalar localtime . “\n”); }

  7. Daytime client use Socket; $port = 13; $remote = $ARGV[0]; $iaddr = inet_aton ($remote); $paddr = sockaddr_in ($port, $iaddr); $proto = getprotobyname (‘tcp’); socket (SOCK, PF_INET, SOCK_STREAM, $proto); connect (SOCK, $paddr); while ($line = <SOCK>) { print ($line); } Close (SOCK);

  8. Issues • Can only deal with one request at once • Performance • Have to wait until the guy in front has finished with the server

  9. Multithreading

  10. Issues • Performance • Thread creation at client connection • Creating threads takes time • Possible deadlock • Due to multithreaded

  11. Issues • Possible deadlock • Resource thrashing • Concurrency errors • Thread leakage • Request overload • Performance • Thread creation still has to be performed in the main loop

  12. Pool Alternative Implementation • Create pool as before • Create thread which makes sure the pool has n thread waiting • On connection take thread from the pool • The above thread makes sure there are always threads in the pool waiting to be used

  13. Summary

More Related