Hi,

      Thanks for getting back to me.  Incidentally, that's exactly what my
server module looks like.  And while my wrapper script was using "erl -run
server start" as opposed to "erl -s server", neither of them creates a
server that accepts incoming connections from thrift clients, unless I
invoke their server:start() from the erlang shell itself, which I found
pretty bizarre.

      I just tried this with a vanilla Thrift install, so unless there's
some differences in our Erlang VM's, one can probably reproduce it
themselves by doing the following (assuming everything is built, etc):

1. Generate the thrift tutorial files with 'thrift -r --gen erl
tutorial.thrift'.

2. Correct the errors in client.erl and server.erl:  they reference
different constants than Thrift generates, so 'tutorial_ADD',
'tutorial_SUBTRACT' and their ilk should be 'tutorial_Operation_ADD',
'tutorial_Operation_SUBTRACT', etc.

3. Run server.sh, which opens a shell if everything compiled successfully.
Manually call server:start(), then call client:t().  This opens a Thrift
server on Port 9999, runs the client, and works fine.

4. Now edit the 'erl' invocation at the end of server.sh to have '-s server'
as one of it's flags, and run it again (presuming you killed the previous
process).  This automatically calls server:start().  Call client:t().
Connection refused.

     If you edit the word 'localhost' to '127.0.0.1' in the Ruby client (and
feed it port 9999), you'll observe the same thing.

     I'm completely baffled why the shell would require something like this,
and I'll email the list if I find anything (I'm sort of new to the platform,
so I'm reading up on erl(1), boot files, rel files, etc. to see if there's
some semantic difference on invocation that I'm missing).  I just wanted to
know if this was known, or if I'm doing anything blatantly wrong.

     As for thrift_erl_skel, I'm trying to add Thrift to a previously
existing application, so I haven't looked at it too much for my project.
But I'll play with the output it generates, see if it helps.

     Thanks,

-Paul



On Mon, Feb 14, 2011 at 9:18 PM, Anthony Molinaro <
[email protected]> wrote:

> Hi,
>
>  What does your start function currently look like?  You can probably
> do something like
>
> -module (server).
> start () ->
>  thrift_socket_server:start ([{port, 12345},
>                               {name, ?MODULE},
>                               {service, myService_thrift},
>                               {handler, ?MODULE},
>                               {framed, true},
>                               {socket_opts, [{recv_timeout, 60000}]}]).
>
> Then you should be able to use
>
> % erl -s server
>
> in a server.  Also you could check out
>
> https://github.com/toddlipcon/thrift_erl_skel
>
> which will create a skeleton application, supervisor, and service.
>
> -Anthony
>
> On Mon, Feb 14, 2011 at 11:07:01AM -0800, Paul Meier wrote:
> > Hi friends,
> >
> >      Forgive me if I'm missing something obvious, but when I try to run
> an
> > Erlang Thrift Server, it works if I run something like:
> >
> > erl +K true -pa all_your_beams/
> >
> >      And run server:start() from the Erlang command shell.
> >
> >      But if I write a bash wrapper that says something like
> >
> > erl +K true -pa all_your_beams/ -noshell -run server start
> >
> >      then connecting clients fail, saying Connection Refused, despite
> there
> > being a message saying there's a Thrift Service listening on the
> appropriate
> > port.  This is the case in both the tutorial and my own application.  Is
> > this a known issue?  Has anyone else experienced this?
> >
> >      It's not mission-critical, but any help would be appreciated.
>  Thanks
> > ^_^
> >
> > -Paul
>
> --
> ------------------------------------------------------------------------
> Anthony Molinaro                           <[email protected]>
>

Reply via email to