Hi,
I am trying to create a Julia server instance by using ZMQ with the Req/Rep
pattern. My Julia code for the Rep-server looks like this:
module JServer
# import zmq
using ZMQ
import Base.gc
# create context
ctx=Context();
# create socket
socket=Socket(ctx, REP);
# msg
msg = 0;
# repeatedly collect garbage every second
timer = Timer(gc, 1, 1);
function connect(host, port)
# connect
ZMQ.connect(socket, string("tcp://", host, ":", port));
println(string("Julia server connected to ", host, " on port ", port));
end
function startServer()
# notify
println("Waiting for request...")
i = 1
while i <= 2
# invoke garbage collection
# gc();
# Poll For message
msg = receive();
println("Message received");
# Reply
send();
println("Message acknowledged");
end
end
function receive()
msg = ZMQ.recv(socket);
end
function send()
ZMQ.send(socket, Message("test request"));
end
function gc(event)
gc();
end
end
I can successfully start the server by runnung this script (indicating host
and port via ARGS):
# include server module
include(string(dirname(Base.source_path()), "\JServer.jl"));
# connect server
JServer.connect(ARGS[1], ARGS[2]);
# start server
JServer.startServer();
My tests seem to be odd, however: Whenever I send large messages from
client, i.e. ~1MB per message, Julia seems to properly keep tracking about
memory usage: The overall process memory remains constant. But when I am
sending small messaged (i.e. 10k per message) Julia memory usage is growing
permanenlty. In addition response time slows down over my requests. This
does not happen if I explicitly invoke the garbage collector inside the
while loop, but this would slow down the replies significantly.
I am using Julia 0.4.6.
Is my code ok? Is there a callback solution in order to be able to avoid
the while loop?