Hi,

I'm making Thrift requests from my front-end web servers (running in PHP) to my back-end app servers (running in C#). There are two problems, and I think they're related, but I can't figure out what's causing them:

1. I'm having strange delays in the PHP client. If I make several requests during a single page load, the first one will return quickly (elapsed time < 1ms), but subsequent requests take up to 100 ms to complete. This only happens from PHP - tests from other languages do not have this delay, so I'm pretty sure it's not network latency.

2. After every request, errors are being thrown by the server, with the message: "Thrift.Transport.TTransportException: Cannot read, Remote side has closed". The TServer catches it and logs it, but I'm guessing that it's related to the delays, i.e., that the PHP TClient isn't closing the connection properly, and the C# TServer is timing out while waiting for it to finish cleanly.

What's really strange is that all my requests complete successfully, and my client and server are stable, only there's this mysterious delay with (almost) every request, and these mysterious server-side errors.

Anybody have any ideas? I can't find anything in the documentation or in forums, and I'm stumped.

Thanks,
Jonathan


-------------------------------------------
-- Client-Server setup:
-------------------------------------------
PHP: Using a TBinaryProtocol, wrapped around a TBufferedTransport, wrapped around a TSocket.

C#: Using a TThreadPoolServer, wrapped around a TServerSocket.

-------------------------------------------
-- Call Stack for Server-Side Exceptions
-------------------------------------------
Thrift.Transport.TTransportException: Cannot read, Remote side has closed
at Thrift.Transport.TTransport.ReadAll(Byte[] buf, Int32 off, Int32 len) in \Thrift\Transport\TTransport.cs:line 44 at Thrift.Protocol.TBinaryProtocol.ReadAll(Byte[] buf, Int32 off, Int32 len) in \Thrift\Protocol\TBinaryProtocol.cs:line 381 at Thrift.Protocol.TBinaryProtocol.ReadI32() in \Thrift\Protocol\TBinaryProtocol.cs:line 327 at Thrift.Protocol.TBinaryProtocol.ReadMessageBegin() in \Thrift\Protocol\TBinaryProtocol.cs:line 210

Reply via email to