Dear Thrift users and Developers,

I've written a simple service which has the following thrift definition:

service CounterService {
        string increment(1:i64 itemId),
        string getCount(1:i64 itemId),
}

In our system, we're using PHP as the client and Java as the Server,
Following the sample client and server stub examples included in the
tutorial package, I haven't made any big differences in both the Client and
Server code (and of course never touched the auto-generated code);

The Java Server makes use of the following simple stub:

--Server.java--
CounterHandler handler = new CounterHandler();
CounterService.Processor processor = new CounterService.Processor(handler);
TServerTransport serverTransport;
serverTransport = new TServerSocket(8888);
server = new TThreadPoolServer(processor, serverTransport);
---

The CounterHandler implements CounterService.Iface

In the PHP Client code I have,

--Client.php--
$server = '192.168.1.64';
$socket = new TSocket($server, 8888, TRUE); //Using persistent connection to
the Java Service
$transport = new TBufferedTransport($socket, 1024, 1024);
$protocol = new TBinaryProtocol($transport);
$client = new CounterServiceClient($protocol);
$transport->open();
$jcount = $client->increment($auctionId);
$transport->close();
---

The problem is the fact that; under our production load (1500 persistent
socket connections from 7 PHP clients, about a total of  300 requests per
second), the PHP Client fails to get the correct increment(id) value from
the Buffer, it somehow gets previous replies from the Server.

I'm logging the Java Server transactions, the Java Server seems to work
fine; I'm suspecting that the problem occurs because of the PHP client
libraries.

We are running PHP in lighttpd and fastcgi btw.

Any comments on solving the problem is welcome.

Regards,
Utku

Reply via email to