Всякий раз, когда я использую сервер Apache Thrift Erlang, он работает без каких-либо ошибок, но когда я подключаю к нему клиент, он выдает эту ошибку. Что я здесь не так делаю? Я использую ОС Windows 8.
Это мой файл .thrift ->
service CompManager {
string addWindow(1: i64 window_id, 2: list<string> comps)
}
Это мой код сервера для Erlang: —
-module(server).
-include("compManager_thrift.hrl").
-export([start/0, start/1, handle_function/2,
stop/1, addWindow/2]).
addWindow(_, _) ->
io:format("inside the addWindow~n"),
"gotit".
%% part
start() ->
start(9999).
start(Port) ->
Handler = ?MODULE,
thrift_socket_server:start([{handler, Handler},
{service, compManager_thrift},
{port, Port},
{name, tutorial_server},
{framed, true},
{socket_opts, [{recv_timeout, 60*60*1000}]}]).
stop(Server) ->
thrift_socket_server:stop(Server).
handle_function(Function, Args) when is_atom(Function), is_tuple(Args) ->
case apply(?MODULE, Function, tuple_to_list(Args)) of
ok -> ok;
Reply -> {reply, Reply}
end.
и это мой код клиента php: —
<?php
error_reporting(E_ALL);
require_once __DIR__.'/../lib/php/lib/Thrift/ClassLoader/ThriftClassLoader.php';
require_once '../gen-php/CompManager.php';
use Thrift\ClassLoader\ThriftClassLoader;
$loader = new ThriftClassLoader();
$loader->registerNamespace('Thrift', __DIR__ . '/../lib/php/lib');
$loader->register();
use Thrift\Protocol\TBinaryProtocol;
use Thrift\Transport\TSocket;
use Thrift\Transport\TBufferedTransport;
use Thrift\Exception\TException;
try {
$socket = new TSocket('localhost', 9999);
$transport = new TBufferedTransport($socket, 1024, 1024);
$protocol = new TBinaryProtocol($transport);
$client = new CompManagerClient($protocol);
$transport->open();
$output = $client->addWindow(1222, array("first", "sec"));
print "$output\n";
print "done!";
$transport->close();
} catch (TException $tx) {
print 'TException: '.$tx->getMessage()."\n";
}
?>
и ошибка, которую он выдает на клиенте:
TException: TSocket: Could not connect to localhost:9999 (A connection attempt f
ailed because the connected party did not properly respond after a period of tim
e, or established connection failed because connected host has failed to respond
.
[10060])
и для клиента Python это дает: —
Traceback (most recent call last):
File "PythonClient.py", line 59, in <module>
main()
File "PythonClient.py", line 51, in main
sum = client.addWindow(1, ["first", "second"])
File "../gen-py/first/CompManager.py", line 44, in addWindow
return self.recv_addWindow()
File "../gen-py/first/CompManager.py", line 56, in recv_addWindow
(fname, mtype, rseqid) = self._iprot.readMessageBegin()
File "../lib/py/build\lib\thrift\protocol\TBinaryProtocol.py", line 134, in re
adMessageBegin
sz = self.readI32()
File "../lib/py/build\lib\thrift\protocol\TBinaryProtocol.py", line 217, in re
adI32
buff = self.trans.readAll(4)
File "../lib/py/build\lib\thrift\transport\TTransport.py", line 60, in readAll
chunk = self.read(sz - have)
File "../lib/py/build\lib\thrift\transport\TTransport.py", line 161, in read
self.__rbuf = BufferIO(self.__trans.read(max(sz, self.__rbuf_size)))
File "../lib/py/build\lib\thrift\transport\TSocket.py", line 117, in read
buff = self.handle.recv(sz)
socket.error: [Errno 10054] An existing connection was forcibly closed by the re
mote host
Пожалуйста, помогите :-(, я пытаюсь это в течение последних 4 дней, но безуспешно. Я также пробовал пример Thrift, но это дает ту же ошибку.
Задача ещё не решена.
Других решений пока нет …