Gnutella Search

QArea's Perl solution helps to increase Gnutella's database searching performance and allows IPC facilities implementation.

Client

Our client had an already developed distributed search database with internal communication protocol. Originally, it was a software product, written in PHP, implementing Gnutella's client and providing web-interface to fulfil the search. To increase searching performance company needed their product to work with multiple Gnutella servers simultaneously and to improve web-interface.

Requirements Analysis

The problem analysis and consideration of possible solutions revealed little sense in further modification or partial re-engineering of the exiting code due to the following reasons:

  • There is no thread and fork facilities in PHP, and IPC facilities are very poorly implemented.
  • Communication protocol of interaction with Gnutella search server is incorrectly implemented in the existing code.
  • The existing code is very poorly designed.

Due to the above a complete implementation of the product in Perl from scratch by our developers was proposed and accepted.

Our Solution

Environment

Platform/OS: Linux 6.0

Language: Perl 5.005

WebServer: Apache

RDBMS: MySQL

After studying the interchange protocol of Gnutella search sever and client, search client was implemented. The client was enabled to receive input in form of search request and search timeout. It was implemented to open several parallel sessions with different Gnutella servers. When search timeout was exceeded, the client closed all sessions and prepared the responses (responses were sorted by servers, duplicate answers were deleted). A Web interface which provides IPC (inter process communication) was implemented to pass the search request to client and fulfil formatted output of the responses to HTML form. Web interface was implemented using "template" technology that gave our customer the ability of full change of product design without our help.

Request a Quote

* Please fill in fields with asterisk.

Request a Call

* Fields with asterisk are mandatory for filling.