GithubHelp home page GithubHelp logo

zeromq / lzmq Goto Github PK

View Code? Open in Web Editor NEW
134.0 13.0 46.0 661 KB

Lua binding to ZeroMQ

License: MIT License

Shell 0.79% CMake 7.06% Lua 58.52% C 33.39% C++ 0.24%
lua-bindings zeromq ffi messaging lua zmq

lzmq's Introduction

Lua binding to ZeroMQ library.

Build Status Coverage Status Licence

Support ZeroMQ version 3.2.x/4.x
This library is not dropin replacement for lua-zmq library.
This library has C and FFI version of binding.

Source Code

https://github.com/zeromq/lzmq

Install

If you plan use lzmq.threads module then you should also install llthreads2

  • Using LuaRocks:
    luarocks install lua-llthreads2 or luarocks install lua-llthreads2-compat
    luarocks install lzmq or install only ffi version luarocks install lzmq-ffi

  • Using LuaDist:
    luadist install lua-llthreads2 or luadist install lua-llthreads2-compat
    luadist install lzmq or luadist install lzmq-ffi

API

This is short API description.
See also exampes from OMQ - The Guide.

Performance

To run same test you should copy original performance tests to exampes/perf2/libzmq and run runner.lua from exampes/perf2. For now it require LuaJIT and exists C and FFI version of lzmq library.
Of course you can run any test manually.

Inproc Throughput Test:

message size: 30 [B]
message count: 10000
mean throughput [Mb/s]:

# libzmq str str(ffi) msg msg(ffi)
1 349.396 307.141 393.636 186.162 239.617
2 350.007 310.398 412.371 188.132 248.011
3 377.596 311.284 413.010 205.076 281.228
4 422.535 308.206 414.007 174.406 248.679
5 392.477 311.324 411.876 181.722 274.946
6 382.470 309.917 395.127 177.528 631.413
7 393.636 324.851 415.010 186.437 282.686
8 386.910 303.298 379.627 116.919 268.908
9 397.022 311.931 415.945 187.749 244.998
10 438.196 302.763 412.229 189.813 255.646

Inproc Latency Test:

message size: 1 [B]
message count: 10000
average latency [us]:

# libzmq str str(ffi) msg msg(ffi)
1 97.356 97.378 98.221 94.274 96.880
2 95.828 96.736 95.957 100.711 96.992
3 99.656 100.347 95.672 97.981 95.312
4 96.649 99.943 94.543 96.198 94.674
5 96.013 102.196 94.184 97.575 94.990
6 96.371 97.925 98.377 95.350 97.165
7 96.253 93.625 97.198 94.856 94.544
8 95.155 96.371 94.904 96.792 95.507
9 94.703 96.698 96.924 97.951 95.527
10 95.635 97.946 95.684 96.429 92.629

Incompatibility list with lua-zmq (this is not full)

Feature lua-zmq lzmq
global zmq variable create does not create
zmq.init io_threads optional io_threads require
create message zmq.zmq_msg_t.init_XXX zmq.msg_init_XXX
message as string tostring(msg) msg:data()/tostring(msg)
message as ud msg:data() msg:pointer()
msg:close();msg:data() AV lua error

lzmq's People

Contributors

abrosimov-a-a avatar bitdeli-chef avatar bluca avatar moteus avatar smcgill3 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

lzmq's Issues

Luarocks install lzmq failed

ProxyChains-3.1 (http://proxychains.sf.net)
Installing https://raw.githubusercontent.com/rocks-moonscript-org/moonrocks-mirror/master/lzmq-0.4.3-1.src.rock...
Using https://raw.githubusercontent.com/rocks-moonscript-org/moonrocks-mirror/master/lzmq-0.4.3-1.src.rock... switching to 'build' mode
Archive:  v0.4.3.zip
72dbca09652bcc8f27a6ae2662f05d8220e25a2f
   creating: lzmq-0.4.3/
  inflating: lzmq-0.4.3/.gitignore   
  inflating: lzmq-0.4.3/.travis.yml  
   creating: lzmq-0.4.3/.travis/
  inflating: lzmq-0.4.3/.travis/platform.sh  
  inflating: lzmq-0.4.3/.travis/setup_lua.sh  
  inflating: lzmq-0.4.3/.travis/setup_sodium.sh  
  inflating: lzmq-0.4.3/.travis/setup_zmq.sh  
  inflating: lzmq-0.4.3/CMakeLists.txt  
  inflating: lzmq-0.4.3/LICENCE.txt  
  inflating: lzmq-0.4.3/README.md    
   creating: lzmq-0.4.3/cmake/
  inflating: lzmq-0.4.3/cmake/FindLua.cmake  
  inflating: lzmq-0.4.3/cmake/FindZMQ.cmake  
  inflating: lzmq-0.4.3/cmake/dist.cmake  
  inflating: lzmq-0.4.3/cmake/lua.cmake  
  inflating: lzmq-0.4.3/dist.info    
   creating: lzmq-0.4.3/doc/
  inflating: lzmq-0.4.3/doc/lzmq.ldoc  
   creating: lzmq-0.4.3/doc/lzmq/
  inflating: lzmq-0.4.3/doc/lzmq/loop.ldoc  
  inflating: lzmq-0.4.3/doc/lzmq/poller.ldoc  
  inflating: lzmq-0.4.3/doc/lzmq/threads.ldoc  
  inflating: lzmq-0.4.3/doc/lzmq/timer.ldoc  
   creating: lzmq-0.4.3/examples/
   creating: lzmq-0.4.3/examples/device/
  inflating: lzmq-0.4.3/examples/device/cli.lua  
  inflating: lzmq-0.4.3/examples/device/device.lua  
  inflating: lzmq-0.4.3/examples/device/srv.lua  
  inflating: lzmq-0.4.3/examples/echo_cli.lua  
  inflating: lzmq-0.4.3/examples/echo_loop.lua  
  inflating: lzmq-0.4.3/examples/echo_loop_raw.lua  
  inflating: lzmq-0.4.3/examples/monitor.lua  
   creating: lzmq-0.4.3/examples/perf/
  inflating: lzmq-0.4.3/examples/perf/local_lat.lua  
  inflating: lzmq-0.4.3/examples/perf/local_multipart.lua  
  inflating: lzmq-0.4.3/examples/perf/local_thr.lua  
  inflating: lzmq-0.4.3/examples/perf/remote_lat.lua  
  inflating: lzmq-0.4.3/examples/perf/remote_multipart.lua  
  inflating: lzmq-0.4.3/examples/perf/remote_thr.lua  
  inflating: lzmq-0.4.3/examples/perf/test_lat.bat  
  inflating: lzmq-0.4.3/examples/perf/test_multipart.bat  
  inflating: lzmq-0.4.3/examples/perf/test_thr.bat  
  inflating: lzmq-0.4.3/examples/perf/thread_lat.lua  
  inflating: lzmq-0.4.3/examples/perf/thread_thr.lua  
   creating: lzmq-0.4.3/examples/perf2/
   creating: lzmq-0.4.3/examples/perf2/lat/
  inflating: lzmq-0.4.3/examples/perf2/lat/inproc_lat.lua  
  inflating: lzmq-0.4.3/examples/perf2/lat/local_lat.lua  
  inflating: lzmq-0.4.3/examples/perf2/lat/remote_lat.lua  
   creating: lzmq-0.4.3/examples/perf2/lat_nomsg/
  inflating: lzmq-0.4.3/examples/perf2/lat_nomsg/inproc_lat.lua  
  inflating: lzmq-0.4.3/examples/perf2/lat_nomsg/local_lat.lua  
  inflating: lzmq-0.4.3/examples/perf2/lat_nomsg/remote_lat.lua  
  inflating: lzmq-0.4.3/examples/perf2/runner.lua  
   creating: lzmq-0.4.3/examples/perf2/thr/
  inflating: lzmq-0.4.3/examples/perf2/thr/inproc_thr.lua  
  inflating: lzmq-0.4.3/examples/perf2/thr/local_thr.lua  
  inflating: lzmq-0.4.3/examples/perf2/thr/remote_thr.lua  
   creating: lzmq-0.4.3/examples/perf2/thr_nomsg/
  inflating: lzmq-0.4.3/examples/perf2/thr_nomsg/inproc_thr.lua  
  inflating: lzmq-0.4.3/examples/perf2/thr_nomsg/local_thr.lua  
  inflating: lzmq-0.4.3/examples/perf2/thr_nomsg/remote_thr.lua  
  inflating: lzmq-0.4.3/examples/queue_device.lua  
  inflating: lzmq-0.4.3/examples/utils.lua  
  inflating: lzmq-0.4.3/examples/uv_actor.lua  
  inflating: lzmq-0.4.3/examples/zap.lua  
  inflating: lzmq-0.4.3/lakeconfig.lua  
  inflating: lzmq-0.4.3/lakefile     
   creating: lzmq-0.4.3/msvc/
  inflating: lzmq-0.4.3/msvc/luazmq.sln  
  inflating: lzmq-0.4.3/msvc/luazmq.vcproj  
  inflating: lzmq-0.4.3/msvc/lztimer.vcproj  
   creating: lzmq-0.4.3/rockspecs/
  inflating: lzmq-0.4.3/rockspecs/lzmq-0.1.0-1.rockspec  
  inflating: lzmq-0.4.3/rockspecs/lzmq-0.1.1-1.rockspec  
  inflating: lzmq-0.4.3/rockspecs/lzmq-0.1.2-1.rockspec  
  inflating: lzmq-0.4.3/rockspecs/lzmq-0.1.3-1.rockspec  
  inflating: lzmq-0.4.3/rockspecs/lzmq-0.2.0-1.rockspec  
  inflating: lzmq-0.4.3/rockspecs/lzmq-0.3.0-1.rockspec  
  inflating: lzmq-0.4.3/rockspecs/lzmq-0.3.1-1.rockspec  
  inflating: lzmq-0.4.3/rockspecs/lzmq-0.3.2-1.rockspec  
  inflating: lzmq-0.4.3/rockspecs/lzmq-0.3.3-1.rockspec  
  inflating: lzmq-0.4.3/rockspecs/lzmq-0.3.4-1.rockspec  
  inflating: lzmq-0.4.3/rockspecs/lzmq-0.3.5-1.rockspec  
  inflating: lzmq-0.4.3/rockspecs/lzmq-0.3.6-1.rockspec  
  inflating: lzmq-0.4.3/rockspecs/lzmq-0.4.0-1.rockspec  
  inflating: lzmq-0.4.3/rockspecs/lzmq-0.4.1-1.rockspec  
  inflating: lzmq-0.4.3/rockspecs/lzmq-0.4.2-1.rockspec  
  inflating: lzmq-0.4.3/rockspecs/lzmq-0.4.3-1.rockspec  
  inflating: lzmq-0.4.3/rockspecs/lzmq-ffi-0.1.3-1.rockspec  
  inflating: lzmq-0.4.3/rockspecs/lzmq-ffi-0.2.0-1.rockspec  
  inflating: lzmq-0.4.3/rockspecs/lzmq-ffi-0.3.0-1.rockspec  
  inflating: lzmq-0.4.3/rockspecs/lzmq-ffi-0.3.1-1.rockspec  
  inflating: lzmq-0.4.3/rockspecs/lzmq-ffi-0.3.2-1.rockspec  
  inflating: lzmq-0.4.3/rockspecs/lzmq-ffi-0.3.3-1.rockspec  
  inflating: lzmq-0.4.3/rockspecs/lzmq-ffi-0.3.4-1.rockspec  
  inflating: lzmq-0.4.3/rockspecs/lzmq-ffi-0.3.5-1.rockspec  
  inflating: lzmq-0.4.3/rockspecs/lzmq-ffi-0.3.6-1.rockspec  
  inflating: lzmq-0.4.3/rockspecs/lzmq-ffi-0.4.0-1.rockspec  
  inflating: lzmq-0.4.3/rockspecs/lzmq-ffi-0.4.1-1.rockspec  
  inflating: lzmq-0.4.3/rockspecs/lzmq-ffi-0.4.2-1.rockspec  
  inflating: lzmq-0.4.3/rockspecs/lzmq-ffi-0.4.3-1.rockspec  
  inflating: lzmq-0.4.3/rockspecs/lzmq-ffi-scm-0.rockspec  
  inflating: lzmq-0.4.3/rockspecs/lzmq-scm-0.rockspec  
  inflating: lzmq-0.4.3/rockspecs/lzmq-timer-0.1.2-1.rockspec  
  inflating: lzmq-0.4.3/rockspecs/lzmq-timer-0.3.5-1.rockspec  
  inflating: lzmq-0.4.3/rockspecs/lzmq-timer-0.4.2-1.rockspec  
  inflating: lzmq-0.4.3/rockspecs/lzmq-timer-scm-0.rockspec  
   creating: lzmq-0.4.3/script/
  inflating: lzmq-0.4.3/script/getsockopt.lua  
   creating: lzmq-0.4.3/src/
   creating: lzmq-0.4.3/src/lua/
   creating: lzmq-0.4.3/src/lua/lzmq/
  inflating: lzmq-0.4.3/src/lua/lzmq/ffi.lua  
   creating: lzmq-0.4.3/src/lua/lzmq/ffi/
  inflating: lzmq-0.4.3/src/lua/lzmq/ffi/api.lua  
  inflating: lzmq-0.4.3/src/lua/lzmq/ffi/error.lua  
  inflating: lzmq-0.4.3/src/lua/lzmq/ffi/loop.lua  
  inflating: lzmq-0.4.3/src/lua/lzmq/ffi/lzmq.lua  
  inflating: lzmq-0.4.3/src/lua/lzmq/ffi/poller.lua  
  inflating: lzmq-0.4.3/src/lua/lzmq/ffi/threads.lua  
  inflating: lzmq-0.4.3/src/lua/lzmq/ffi/timer.lua  
   creating: lzmq-0.4.3/src/lua/lzmq/impl/
  inflating: lzmq-0.4.3/src/lua/lzmq/impl/loop.lua  
  inflating: lzmq-0.4.3/src/lua/lzmq/impl/threads.lua  
   creating: lzmq-0.4.3/src/lua/lzmq/llthreads/
  inflating: lzmq-0.4.3/src/lua/lzmq/llthreads/ex.lua  
  inflating: lzmq-0.4.3/src/lua/lzmq/loop.lua  
  inflating: lzmq-0.4.3/src/lua/lzmq/poller.lua  
  inflating: lzmq-0.4.3/src/lua/lzmq/threads.lua  
  inflating: lzmq-0.4.3/src/lzmq.c   
  inflating: lzmq-0.4.3/src/lzmq.def  
  inflating: lzmq-0.4.3/src/lzmq.h   
  inflating: lzmq-0.4.3/src/lzutils.c  
  inflating: lzmq-0.4.3/src/lzutils.h  
  inflating: lzmq-0.4.3/src/poller.c  
  inflating: lzmq-0.4.3/src/poller.h  
  inflating: lzmq-0.4.3/src/timer.def  
  inflating: lzmq-0.4.3/src/zcontext.c  
  inflating: lzmq-0.4.3/src/zcontext.h  
  inflating: lzmq-0.4.3/src/zerror.c  
  inflating: lzmq-0.4.3/src/zerror.h  
  inflating: lzmq-0.4.3/src/zmsg.c   
  inflating: lzmq-0.4.3/src/zmsg.h   
  inflating: lzmq-0.4.3/src/zpoller.c  
  inflating: lzmq-0.4.3/src/zpoller.h  
  inflating: lzmq-0.4.3/src/zsocket.c  
  inflating: lzmq-0.4.3/src/zsocket.h  
  inflating: lzmq-0.4.3/src/zsupport.h  
  inflating: lzmq-0.4.3/src/ztimer.c  
  inflating: lzmq-0.4.3/src/ztimer.h  
   creating: lzmq-0.4.3/test/
  inflating: lzmq-0.4.3/test/.luacov  
  inflating: lzmq-0.4.3/test/.luacov.ffi  
   creating: lzmq-0.4.3/test/lunit/
  inflating: lzmq-0.4.3/test/lunit/console.lua  
  inflating: lzmq-0.4.3/test/test.lua  
  inflating: lzmq-0.4.3/test/test_metadata.lua  
  inflating: lzmq-0.4.3/test/test_proxy.lua  
  inflating: lzmq-0.4.3/test/test_req_relaxed.lua  
  inflating: lzmq-0.4.3/test/test_threads.lua  
  inflating: lzmq-0.4.3/test/test_threads_actor.lua  
  inflating: lzmq-0.4.3/test/test_threads_actor_poll.lua  
  inflating: lzmq-0.4.3/test/test_threads_arg.lua  
  inflating: lzmq-0.4.3/test/test_threads_file.lua  
  inflating: lzmq-0.4.3/test/test_threads_fork.lua  
  inflating: lzmq-0.4.3/test/test_threads_fork_arg.lua  
  inflating: lzmq-0.4.3/test/test_threads_fork_opt.lua  
  inflating: lzmq-0.4.3/test/test_threads_opt.lua  
  inflating: lzmq-0.4.3/test/test_threads_sync.lua  
 extracting: lzmq-0.4.3/test/thread.lua  
  inflating: lzmq-0.4.3/test/utest.lua  
gcc -O2 -fPIC -I/home/uname/torch/install/include -c src/lzmq.c -o src/lzmq.o -DLUAZMQ_USE_SEND_AS_BUF -DLUAZMQ_USE_TEMP_BUFFERS -DLUAZMQ_USE_ERR_TYPE_OBJECT -I/home/uname/packages/usr/include
gcc -O2 -fPIC -I/home/uname/torch/install/include -c src/lzutils.c -o src/lzutils.o -DLUAZMQ_USE_SEND_AS_BUF -DLUAZMQ_USE_TEMP_BUFFERS -DLUAZMQ_USE_ERR_TYPE_OBJECT -I/home/uname/packages/usr/include
gcc -O2 -fPIC -I/home/uname/torch/install/include -c src/poller.c -o src/poller.o -DLUAZMQ_USE_SEND_AS_BUF -DLUAZMQ_USE_TEMP_BUFFERS -DLUAZMQ_USE_ERR_TYPE_OBJECT -I/home/uname/packages/usr/include
gcc -O2 -fPIC -I/home/uname/torch/install/include -c src/zcontext.c -o src/zcontext.o -DLUAZMQ_USE_SEND_AS_BUF -DLUAZMQ_USE_TEMP_BUFFERS -DLUAZMQ_USE_ERR_TYPE_OBJECT -I/home/uname/packages/usr/include
gcc -O2 -fPIC -I/home/uname/torch/install/include -c src/zerror.c -o src/zerror.o -DLUAZMQ_USE_SEND_AS_BUF -DLUAZMQ_USE_TEMP_BUFFERS -DLUAZMQ_USE_ERR_TYPE_OBJECT -I/home/uname/packages/usr/include
gcc -O2 -fPIC -I/home/uname/torch/install/include -c src/zmsg.c -o src/zmsg.o -DLUAZMQ_USE_SEND_AS_BUF -DLUAZMQ_USE_TEMP_BUFFERS -DLUAZMQ_USE_ERR_TYPE_OBJECT -I/home/uname/packages/usr/include
gcc -O2 -fPIC -I/home/uname/torch/install/include -c src/zpoller.c -o src/zpoller.o -DLUAZMQ_USE_SEND_AS_BUF -DLUAZMQ_USE_TEMP_BUFFERS -DLUAZMQ_USE_ERR_TYPE_OBJECT -I/home/uname/packages/usr/include
gcc -O2 -fPIC -I/home/uname/torch/install/include -c src/zsocket.c -o src/zsocket.o -DLUAZMQ_USE_SEND_AS_BUF -DLUAZMQ_USE_TEMP_BUFFERS -DLUAZMQ_USE_ERR_TYPE_OBJECT -I/home/uname/packages/usr/include
gcc -shared -o lzmq.so -L/home/uname/torch/install/lib src/lzmq.o src/lzutils.o src/poller.o src/zcontext.o src/zerror.o src/zmsg.o src/zpoller.o src/zsocket.o -L/home/uname/packages/usr/lib -Wl,-rpath,/home/uname/packages/usr/lib: -lzmq
/usr/bin/ld: /home/uname/packages/usr/lib/libzmq.a(libzmq_la-zmq.o): relocation R_X86_64_32 against `.rodata.str1.1' can not be used when making a shared object; recompile with -fPIC
/home/uname/packages/usr/lib/libzmq.a: error adding symbols: Bad value
collect2: error: ld returned 1 exit status

Error: Build error: Failed compiling module lzmq.so

I have installed libzmq3-dev_4.0.5+dfsg-2+deb8u1_amd64.deb and python-zmq_14.4.0-1_amd64.deb. Because I have no root privilege, so I have to first apt-get download xxx.deb, then ar x xxx.deb, finally tar xvf data.tar.gz...
But I am still not able to install lzmq, what's wrong with this? I have no idea about the error information, totally lost.

lzmq should use C++ linker (or ZeroMQ should stop using exceptions)

Hello, love this library. I just want to document a problem I had when packaging it for an embedded system with (very) limited storage space. Using the $CC to link lzmq.so is that it only works if libstdc++ is a shared library. If it's a static library, then -lstdc++ gets ignored by GCC and the throw and new symbols are not linked at all. For some dubious reasons, it actually still produce a binary, but it doesn't work (undefined symbols at runtime).

Please either add this to CMakeLists.txt:

set_target_properties(lzmq PROPERTIES LINKER_LANGUAGE CXX)

Maybe wrapped in an CMAKE_CXX_COMPILER_ID check if you want to preserve the ability to compile on system without a C++ compiler, but which a shared libstdc++ library.

Or stop using C++ exception (and that's better). Then it's really only C symbols and wont depend on libstdc++ at all. C++ exceptions are banned in a lot of projects for various reasons, this is one of them.

Steps for compiling in windows

I'm trying to get lzmq compiled in windows (for usage in love2d), and not having much luck. I'm using the provided MSVC project file, and tried with ZMQ 3.2.4/4.0.1 but with both hit the sample issue: missing libzmq.lib file. As far as I can tell neither ZMQ bundle provides that file. Do you have any advice, or extra steps you used on windows?

Cannot supply THREAD_OPTIONS to lzmq.threads

there should be an api form which allows the user to supply their own THREAD_OPTIONS

something like

function zthreads.fork(ctx, code, ...)
  local fork_starter = {code = code} 
  return zthreads.fork_opts(ctx, fork_starter, ...)
end

function zthreads.fork_opts(ctx, thread_opts, ...)
  local pipe, endpoint = make_pipe(ctx)
  if not pipe then return nil, endpoint end

  ctx = ctx:lightuserdata()
  local ok, err = Threads.new(thread_opts, ZMQ_NAME, ctx, endpoint, ...)
  if not ok then
    pipe:close()
    return nil, err
  end
  return ok, pipe
end

use case (supplying package paths to child thread)

loca lua_init = [[
  package.cpath="]] .. package.cpath .. [["
  package.path="]] .. package.path
local opts = {lua_init = lua_init, code = "@my_file.lua"}
zthreads. fork_opts(ctx, opts)

Build error on OSX Mavericks

I have a year-old laptop with Mavericks on it. I have installed Lua 5.1.5 and ØMQ 4.0.3 installed from Homebrew. When I tried luarocks install lzmq and luarocks install lzmq-ffi this is what I got:

https://gist.github.com/kevwil/8427886

I'm guessing there is some incompatibility with my OS or the versions of Lua and ØMQ I'm using?

Installation error in FreeBSD

OS: FreeBSD 9.3

luarocks --version:

/root/torch/install/bin/luarocks 2.2.0beta1
LuaRocks main command-line interface

lua -v:

Lua 5.2.3  Copyright (C) 1994-2013 Lua.org, PUC-Rio

command run: luarocks install lzmq &> lzmq_install.txt

output:

Archive:  v0.4.3.zip
d lzmq-0.4.3
 extracting: lzmq-0.4.3/.gitignore
 extracting: lzmq-0.4.3/.travis.yml
d lzmq-0.4.3/.travis
 extracting: lzmq-0.4.3/.travis/platform.sh
 extracting: lzmq-0.4.3/.travis/setup_lua.sh
 extracting: lzmq-0.4.3/.travis/setup_sodium.sh
 extracting: lzmq-0.4.3/.travis/setup_zmq.sh
 extracting: lzmq-0.4.3/CMakeLists.txt
 extracting: lzmq-0.4.3/LICENCE.txt
 extracting: lzmq-0.4.3/README.md
d lzmq-0.4.3/cmake
 extracting: lzmq-0.4.3/cmake/FindLua.cmake
 extracting: lzmq-0.4.3/cmake/FindZMQ.cmake
 extracting: lzmq-0.4.3/cmake/dist.cmake
 extracting: lzmq-0.4.3/cmake/lua.cmake
 extracting: lzmq-0.4.3/dist.info
d lzmq-0.4.3/doc
 extracting: lzmq-0.4.3/doc/lzmq.ldoc
d lzmq-0.4.3/doc/lzmq
 extracting: lzmq-0.4.3/doc/lzmq/loop.ldoc
 extracting: lzmq-0.4.3/doc/lzmq/poller.ldoc
 extracting: lzmq-0.4.3/doc/lzmq/threads.ldoc
 extracting: lzmq-0.4.3/doc/lzmq/timer.ldoc
d lzmq-0.4.3/examples
d lzmq-0.4.3/examples/device
 extracting: lzmq-0.4.3/examples/device/cli.lua
 extracting: lzmq-0.4.3/examples/device/device.lua
 extracting: lzmq-0.4.3/examples/device/srv.lua
 extracting: lzmq-0.4.3/examples/echo_cli.lua
 extracting: lzmq-0.4.3/examples/echo_loop.lua
 extracting: lzmq-0.4.3/examples/echo_loop_raw.lua
 extracting: lzmq-0.4.3/examples/monitor.lua
d lzmq-0.4.3/examples/perf
 extracting: lzmq-0.4.3/examples/perf/local_lat.lua
 extracting: lzmq-0.4.3/examples/perf/local_multipart.lua
 extracting: lzmq-0.4.3/examples/perf/local_thr.lua
 extracting: lzmq-0.4.3/examples/perf/remote_lat.lua
 extracting: lzmq-0.4.3/examples/perf/remote_multipart.lua
 extracting: lzmq-0.4.3/examples/perf/remote_thr.lua
 extracting: lzmq-0.4.3/examples/perf/test_lat.bat
 extracting: lzmq-0.4.3/examples/perf/test_multipart.bat
 extracting: lzmq-0.4.3/examples/perf/test_thr.bat
 extracting: lzmq-0.4.3/examples/perf/thread_lat.lua
 extracting: lzmq-0.4.3/examples/perf/thread_thr.lua
d lzmq-0.4.3/examples/perf2
d lzmq-0.4.3/examples/perf2/lat
 extracting: lzmq-0.4.3/examples/perf2/lat/inproc_lat.lua
 extracting: lzmq-0.4.3/examples/perf2/lat/local_lat.lua
 extracting: lzmq-0.4.3/examples/perf2/lat/remote_lat.lua
d lzmq-0.4.3/examples/perf2/lat_nomsg
 extracting: lzmq-0.4.3/examples/perf2/lat_nomsg/inproc_lat.lua
 extracting: lzmq-0.4.3/examples/perf2/lat_nomsg/local_lat.lua
 extracting: lzmq-0.4.3/examples/perf2/lat_nomsg/remote_lat.lua
 extracting: lzmq-0.4.3/examples/perf2/runner.lua
d lzmq-0.4.3/examples/perf2/thr
 extracting: lzmq-0.4.3/examples/perf2/thr/inproc_thr.lua
 extracting: lzmq-0.4.3/examples/perf2/thr/local_thr.lua
 extracting: lzmq-0.4.3/examples/perf2/thr/remote_thr.lua
d lzmq-0.4.3/examples/perf2/thr_nomsg
 extracting: lzmq-0.4.3/examples/perf2/thr_nomsg/inproc_thr.lua
 extracting: lzmq-0.4.3/examples/perf2/thr_nomsg/local_thr.lua
 extracting: lzmq-0.4.3/examples/perf2/thr_nomsg/remote_thr.lua
 extracting: lzmq-0.4.3/examples/queue_device.lua
 extracting: lzmq-0.4.3/examples/utils.lua
 extracting: lzmq-0.4.3/examples/uv_actor.lua
 extracting: lzmq-0.4.3/examples/zap.lua
 extracting: lzmq-0.4.3/lakeconfig.lua
 extracting: lzmq-0.4.3/lakefile
d lzmq-0.4.3/msvc
 extracting: lzmq-0.4.3/msvc/luazmq.sln
 extracting: lzmq-0.4.3/msvc/luazmq.vcproj
 extracting: lzmq-0.4.3/msvc/lztimer.vcproj
d lzmq-0.4.3/rockspecs
 extracting: lzmq-0.4.3/rockspecs/lzmq-0.1.0-1.rockspec
 extracting: lzmq-0.4.3/rockspecs/lzmq-0.1.1-1.rockspec
 extracting: lzmq-0.4.3/rockspecs/lzmq-0.1.2-1.rockspec
 extracting: lzmq-0.4.3/rockspecs/lzmq-0.1.3-1.rockspec
 extracting: lzmq-0.4.3/rockspecs/lzmq-0.2.0-1.rockspec
 extracting: lzmq-0.4.3/rockspecs/lzmq-0.3.0-1.rockspec
 extracting: lzmq-0.4.3/rockspecs/lzmq-0.3.1-1.rockspec
 extracting: lzmq-0.4.3/rockspecs/lzmq-0.3.2-1.rockspec
 extracting: lzmq-0.4.3/rockspecs/lzmq-0.3.3-1.rockspec
 extracting: lzmq-0.4.3/rockspecs/lzmq-0.3.4-1.rockspec
 extracting: lzmq-0.4.3/rockspecs/lzmq-0.3.5-1.rockspec
 extracting: lzmq-0.4.3/rockspecs/lzmq-0.3.6-1.rockspec
 extracting: lzmq-0.4.3/rockspecs/lzmq-0.4.0-1.rockspec
 extracting: lzmq-0.4.3/rockspecs/lzmq-0.4.1-1.rockspec
 extracting: lzmq-0.4.3/rockspecs/lzmq-0.4.2-1.rockspec
 extracting: lzmq-0.4.3/rockspecs/lzmq-0.4.3-1.rockspec
 extracting: lzmq-0.4.3/rockspecs/lzmq-ffi-0.1.3-1.rockspec
 extracting: lzmq-0.4.3/rockspecs/lzmq-ffi-0.2.0-1.rockspec
 extracting: lzmq-0.4.3/rockspecs/lzmq-ffi-0.3.0-1.rockspec
 extracting: lzmq-0.4.3/rockspecs/lzmq-ffi-0.3.1-1.rockspec
 extracting: lzmq-0.4.3/rockspecs/lzmq-ffi-0.3.2-1.rockspec
 extracting: lzmq-0.4.3/rockspecs/lzmq-ffi-0.3.3-1.rockspec
 extracting: lzmq-0.4.3/rockspecs/lzmq-ffi-0.3.4-1.rockspec
 extracting: lzmq-0.4.3/rockspecs/lzmq-ffi-0.3.5-1.rockspec
 extracting: lzmq-0.4.3/rockspecs/lzmq-ffi-0.3.6-1.rockspec
 extracting: lzmq-0.4.3/rockspecs/lzmq-ffi-0.4.0-1.rockspec
 extracting: lzmq-0.4.3/rockspecs/lzmq-ffi-0.4.1-1.rockspec
 extracting: lzmq-0.4.3/rockspecs/lzmq-ffi-0.4.2-1.rockspec
 extracting: lzmq-0.4.3/rockspecs/lzmq-ffi-0.4.3-1.rockspec
 extracting: lzmq-0.4.3/rockspecs/lzmq-ffi-scm-0.rockspec
 extracting: lzmq-0.4.3/rockspecs/lzmq-scm-0.rockspec
 extracting: lzmq-0.4.3/rockspecs/lzmq-timer-0.1.2-1.rockspec
 extracting: lzmq-0.4.3/rockspecs/lzmq-timer-0.3.5-1.rockspec
 extracting: lzmq-0.4.3/rockspecs/lzmq-timer-0.4.2-1.rockspec
 extracting: lzmq-0.4.3/rockspecs/lzmq-timer-scm-0.rockspec
d lzmq-0.4.3/script
 extracting: lzmq-0.4.3/script/getsockopt.lua
d lzmq-0.4.3/src
d lzmq-0.4.3/src/lua
d lzmq-0.4.3/src/lua/lzmq
 extracting: lzmq-0.4.3/src/lua/lzmq/ffi.lua
d lzmq-0.4.3/src/lua/lzmq/ffi
 extracting: lzmq-0.4.3/src/lua/lzmq/ffi/api.lua
 extracting: lzmq-0.4.3/src/lua/lzmq/ffi/error.lua
 extracting: lzmq-0.4.3/src/lua/lzmq/ffi/loop.lua
 extracting: lzmq-0.4.3/src/lua/lzmq/ffi/lzmq.lua
 extracting: lzmq-0.4.3/src/lua/lzmq/ffi/poller.lua
 extracting: lzmq-0.4.3/src/lua/lzmq/ffi/threads.lua
 extracting: lzmq-0.4.3/src/lua/lzmq/ffi/timer.lua
d lzmq-0.4.3/src/lua/lzmq/impl
 extracting: lzmq-0.4.3/src/lua/lzmq/impl/loop.lua
 extracting: lzmq-0.4.3/src/lua/lzmq/impl/threads.lua
d lzmq-0.4.3/src/lua/lzmq/llthreads
 extracting: lzmq-0.4.3/src/lua/lzmq/llthreads/ex.lua
 extracting: lzmq-0.4.3/src/lua/lzmq/loop.lua
 extracting: lzmq-0.4.3/src/lua/lzmq/poller.lua
 extracting: lzmq-0.4.3/src/lua/lzmq/threads.lua
 extracting: lzmq-0.4.3/src/lzmq.c
 extracting: lzmq-0.4.3/src/lzmq.def
 extracting: lzmq-0.4.3/src/lzmq.h
 extracting: lzmq-0.4.3/src/lzutils.c
 extracting: lzmq-0.4.3/src/lzutils.h
 extracting: lzmq-0.4.3/src/poller.c
 extracting: lzmq-0.4.3/src/poller.h
 extracting: lzmq-0.4.3/src/timer.def
 extracting: lzmq-0.4.3/src/zcontext.c
 extracting: lzmq-0.4.3/src/zcontext.h
 extracting: lzmq-0.4.3/src/zerror.c
 extracting: lzmq-0.4.3/src/zerror.h
 extracting: lzmq-0.4.3/src/zmsg.c
 extracting: lzmq-0.4.3/src/zmsg.h
 extracting: lzmq-0.4.3/src/zpoller.c
 extracting: lzmq-0.4.3/src/zpoller.h
 extracting: lzmq-0.4.3/src/zsocket.c
 extracting: lzmq-0.4.3/src/zsocket.h
 extracting: lzmq-0.4.3/src/zsupport.h
 extracting: lzmq-0.4.3/src/ztimer.c
 extracting: lzmq-0.4.3/src/ztimer.h
d lzmq-0.4.3/test
 extracting: lzmq-0.4.3/test/.luacov
 extracting: lzmq-0.4.3/test/.luacov.ffi
d lzmq-0.4.3/test/lunit
 extracting: lzmq-0.4.3/test/lunit/console.lua
 extracting: lzmq-0.4.3/test/test.lua
 extracting: lzmq-0.4.3/test/test_metadata.lua
 extracting: lzmq-0.4.3/test/test_proxy.lua
 extracting: lzmq-0.4.3/test/test_req_relaxed.lua
 extracting: lzmq-0.4.3/test/test_threads.lua
 extracting: lzmq-0.4.3/test/test_threads_actor.lua
 extracting: lzmq-0.4.3/test/test_threads_actor_poll.lua
 extracting: lzmq-0.4.3/test/test_threads_arg.lua
 extracting: lzmq-0.4.3/test/test_threads_file.lua
 extracting: lzmq-0.4.3/test/test_threads_fork.lua
 extracting: lzmq-0.4.3/test/test_threads_fork_arg.lua
 extracting: lzmq-0.4.3/test/test_threads_fork_opt.lua
 extracting: lzmq-0.4.3/test/test_threads_opt.lua
 extracting: lzmq-0.4.3/test/test_threads_sync.lua
 extracting: lzmq-0.4.3/test/thread.lua
 extracting: lzmq-0.4.3/test/utest.lua
cc -O2 -fPIC -I/root/torch/install/include -c src/lzmq.c -o src/lzmq.o -DLUAZMQ_USE_SEND_AS_BUF -DLUAZMQ_USE_TEMP_BUFFERS -DLUAZMQ_USE_ERR_TYPE_OBJECT -I/usr/local/include
src/lzmq.c: In function 'luazmq_z85_encode':
src/lzmq.c:366: warning: incompatible implicit declaration of built-in function 'malloc'
src/lzmq.c: In function 'luazmq_z85_decode':
src/lzmq.c:386: warning: incompatible implicit declaration of built-in function 'malloc'
cc -O2 -fPIC -I/root/torch/install/include -c src/lzutils.c -o src/lzutils.o -DLUAZMQ_USE_SEND_AS_BUF -DLUAZMQ_USE_TEMP_BUFFERS -DLUAZMQ_USE_ERR_TYPE_OBJECT -I/usr/local/include
cc -O2 -fPIC -I/root/torch/install/include -c src/poller.c -o src/poller.o -DLUAZMQ_USE_SEND_AS_BUF -DLUAZMQ_USE_TEMP_BUFFERS -DLUAZMQ_USE_ERR_TYPE_OBJECT -I/usr/local/include
cc -O2 -fPIC -I/root/torch/install/include -c src/zcontext.c -o src/zcontext.o -DLUAZMQ_USE_SEND_AS_BUF -DLUAZMQ_USE_TEMP_BUFFERS -DLUAZMQ_USE_ERR_TYPE_OBJECT -I/usr/local/include
cc -O2 -fPIC -I/root/torch/install/include -c src/zerror.c -o src/zerror.o -DLUAZMQ_USE_SEND_AS_BUF -DLUAZMQ_USE_TEMP_BUFFERS -DLUAZMQ_USE_ERR_TYPE_OBJECT -I/usr/local/include
cc -O2 -fPIC -I/root/torch/install/include -c src/zmsg.c -o src/zmsg.o -DLUAZMQ_USE_SEND_AS_BUF -DLUAZMQ_USE_TEMP_BUFFERS -DLUAZMQ_USE_ERR_TYPE_OBJECT -I/usr/local/include
cc -O2 -fPIC -I/root/torch/install/include -c src/zpoller.c -o src/zpoller.o -DLUAZMQ_USE_SEND_AS_BUF -DLUAZMQ_USE_TEMP_BUFFERS -DLUAZMQ_USE_ERR_TYPE_OBJECT -I/usr/local/include
cc -O2 -fPIC -I/root/torch/install/include -c src/zsocket.c -o src/zsocket.o -DLUAZMQ_USE_SEND_AS_BUF -DLUAZMQ_USE_TEMP_BUFFERS -DLUAZMQ_USE_ERR_TYPE_OBJECT -I/usr/local/include
cc -shared -o lzmq.so -L/root/torch/install/lib src/lzmq.o src/lzutils.o src/poller.o src/zcontext.o src/zerror.o src/zmsg.o src/zpoller.o src/zsocket.o -L/usr/local/lib -lzmq
/usr/bin/ld: cannot find -lzmq

Error: Build error: Failed compiling module lzmq.so

Does not close socket on ETERM

Now if socket detect ETERM it close himself immediately.
This is not very convinient on multithread code.

-- Worker thread
while true do
  local ok, err = sok:recvx()
  if not ok then break end
end
cleanup()
-- main thread

-- srart worker thread
-- wait
ctx:destroy()

In this example sok will get ETERM just after ctx:destroy() and close himself.
After thet ctx:destroy() will be ended main thread also ended.
So cleanup may be not called.

Now lzmq context close all sockets by default so I think it compatiable with preview version excapt this case.

Configure `pipe` for child thread

We need way to configure protocol(tcp/ipc/inpoc) name(IP/path/name) and type(PAIR/DEALER/REQ)
To configure pipe type we some time needs provide type for parent and child socket.
Also there may be use case when you run worker threads and whant to connect their pipes to some manager. In this case we should tell to fork that it should not create parent pipe and just crate child pipe and connect it to existing endpoint

local ep = "inproc://some.manager"
manager = Manager.new(ep)
for i = 1, 10 do
  zthreads.xfork{
    -- worker thread manageg by `manager` object
    function(pipe) pipe:send"READY" ... end;
    pipe = { ? = ep}
  }
end

I suggest use pipe option instead of endpoint_transport and endpoint_name
At first it can be protocol(transport) or full endpoint address.
e.g. pipe="tcp" pipe="ipc://some/pipe/name"
Extract transport part from string is easy task. And provide name without protocol is quite useless thing.
In the next version we could extend pipe argument to accept table

pipe = {
  endpoint = -- same as `pipe` string argument
  ... other options to configure parent/child pipe
}

/cc @johnfoconnor

lzmq installation problems

Fresh installation of Torch7 distribution, followed by the successful installation of lzmq:

luarocks install lzmq
.....
lzmq 0.4.3-1 is now built and installed in /home/vilem/torch/install/ (license: MIT/X11)

However, loading of lzmq fails:

th> require 'lzmq'
/home/vilem/torch/install/share/lua/5.1/trepl/init.lua:384: /home/vilem/torch/install/share/lua/5.1/luarocks/loader.lua:117: error loading module 'lzmq' from file '/home/vilem/torch/install/lib/luarocks/rocks/lzmq':
cannot read /home/vilem/torch/install/lib/luarocks/rocks/lzmq: Is a directory
stack traceback:
[C]: in function 'error'
/home/vilem/torch/install/share/lua/5.1/trepl/init.lua:384: in function 'require'
[string "_RESULT={require 'lzmq'}"]:1: in main chunk
[C]: in function 'xpcall'
/home/vilem/torch/install/share/lua/5.1/trepl/init.lua:651: in function 'repl'
...ilem/torch/install/lib/luarocks/rocks/trepl/scm-1/bin/th:199: in main chunk
[C]: at 0x00406670

Ubuntu 14.04.
I noticed that installing lzmq-ffi with luarocks solves the problem, however these bindings are not suitable for iTorch, so this does not solve my problem.
I would be very grateful for any help.

lzmq doesn't use `pkg-config`

Fails to compile because it selects wrong ZMQ.

My system (Ubuntu 12.0) provides some old ZMQ headers in /usr/include.

I installed some recent ZMQ version (via Homebrew). I have a pkg-config in my PATH which will find the correct ZMQ.

lzmq however doesn't seem to use pkg-config and thus fails.

Using https://raw.githubusercontent.com/rocks-moonscript-org/moonrocks-mirror/master/lzmq-0.4.3-1.src.rock... switching to 'build' mode
Archive:  v0.4.3.zip
72dbca09652bcc8f27a6ae2662f05d8220e25a2f
   creating: lzmq-0.4.3/
...
gcc -O2 -fPIC -I/u/zeyer/code/torch/install/include -c src/lzmq.c -o src/lzmq.o -DLUAZMQ_USE_SEND_AS_BUF -DLUAZMQ_USE_TEMP_BUFFERS -DLUAZMQ_USE_ERR_TYPE_OBJECT -I/usr/include
src/lzmq.c:483:1: error: ‘ZMQ_EVENT_CONNECTED’ undeclared here (not in a function)
src/lzmq.c:484:1: error: ‘ZMQ_EVENT_CONNECT_DELAYED’ undeclared here (not in a function)
src/lzmq.c:485:1: error: ‘ZMQ_EVENT_CONNECT_RETRIED’ undeclared here (not in a function)
src/lzmq.c:487:1: error: ‘ZMQ_EVENT_LISTENING’ undeclared here (not in a function)
src/lzmq.c:488:1: error: ‘ZMQ_EVENT_BIND_FAILED’ undeclared here (not in a function)
src/lzmq.c:490:1: error: ‘ZMQ_EVENT_ACCEPTED’ undeclared here (not in a function)
src/lzmq.c:491:1: error: ‘ZMQ_EVENT_ACCEPT_FAILED’ undeclared here (not in a function)
src/lzmq.c:493:1: error: ‘ZMQ_EVENT_CLOSED’ undeclared here (not in a function)
src/lzmq.c:494:1: error: ‘ZMQ_EVENT_CLOSE_FAILED’ undeclared here (not in a function)
src/lzmq.c:495:1: error: ‘ZMQ_EVENT_DISCONNECTED’ undeclared here (not in a function)
src/lzmq.c:500:1: error: ‘ZMQ_EVENT_ALL’ undeclared here (not in a function)

Error: Failed installing dependency: https://raw.githubusercontent.com/rocks-moonscript-org/moonrocks-mirror/master/lzmq-0.4.3-1.src.rock - Build error: Failed compiling object src/lzmq.o

Support Lua 5.4

Lua 5.4 had been published and have a few changes from 5.3. I can see the rockspec sets the library does not support Lua 5.4. Any idea of supporting for Lua 5.4?
I tried and lzmq (installed via rockspec/lzmq-scm-0.rockspec) can pass all the tests on Lua 5.4 (on a Fedora 33 machine).

Memory leaks when creates context and socket locally

This is possibly memory leaks in lzmq, when create context and sockets together. Following is my testing code. The used memory increase slowly.

local zmq = require 'lzmq'
local option = {zmq.REQ, linger=0, connect = "tcp://localhost:5093", rcvtimeo = 20}

local function query_log()
local ctx = zmq.context()
local client, err = ctx:socket(option)
client:close()
ctx:shutdown()
ctx:destroy()
end

while true do
print(collectgarbage('count'))
query_log()
collectgarbage('collect')
end

I am using zeromq 4.0.4 (built with source code) and lzmq 0.3.5-1 (from luarocks) OS: Ubuntu Gnome 14.04

If I create the ctx out of this query_log function, the memory will not be increased.

Compiling For Windows

Been wanting to experiment with ZeroMQ and Lua, after extensively using Lua for Total War.

But there are no instructions for getting this going on Windows. The goal is to get this compiled and working with ZeroBrane Studio, which is a proper IDE for LuaJIT 5.1. How would I go about doing this?

Default branch of lzmq repo has been deleted

When trying to clone the repo, getting the following

% git clone https://github.com/zeromq/lzmq
Cloning into 'lzmq'...
remote: Counting objects: 2352, done.
remote: Total 2352 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (2352/2352), 518.30 KiB | 327.00 KiB/s, done.
Resolving deltas: 100% (1447/1447), done.
Checking connectivity... done.
warning: remote HEAD refers to nonexistent ref, unable to checkout.

Please, publish the .dll

Hello Bro!

I'm not programmer, and I spent 2 days trying to compile your code unsuccessfully.

Errors follow one another, and that makes me so sad(

I need your lua binding VERY VERY MUCH.

Please, publish the .dll x64 in Releases or here.

Thanks)

Error loading module 'lzmq'... The specified module could not be found

When trying to load lzmq in lua, I receive the following error:

error loading module 'lzmq' from file 'C:\Users\Steve\luatest\lua\lib\lua\5.1\lzmq.dll': The specified module could not be found.

I am running Lua 5.1.5 x64 on Windows 10. (I need this specific version as I'm modding a game that uses it). I have installed lzmq via luarocks into a custom tree folder, and have specified the correct path and cpath in my interpreter. I am using the following Windows ZMQ library: http://miru.hk/archive/ZeroMQ-4.0.4~miru1.0-x64.exe. I had to rename libzmq-v120-mt-4_0_4.lib to libzmq.lib so that luarocks could find it during the install and compilation.

It successfully compiles (with some warnings) using the x64 Native Tools Command Prompt for VS 2017:

C:\Users\Steve\luatest>luarocks install lzmq --tree lua ZMQ_DIR=C:\Users\Steve\luatest\zmq
Installing https://luarocks.org/lzmq-0.4.3-1.src.rock
cl /nologo /MD /O2 -c -Fosrc/lzmq.obj -IC:/Program Files/lua-5.1.5/include src/lzmq.c -DLUAZMQ_USE_SEND_AS_BUF -DLUAZMQ_USE_TEMP_BUFFERS -DLUAZMQ_USE_ERR_TYPE_OBJECT -IC:\Users\Steve\luatest\zmq/include
lzmq.c
cl /nologo /MD /O2 -c -Fosrc/lzutils.obj -IC:/Program Files/lua-5.1.5/include src/lzutils.c -DLUAZMQ_USE_SEND_AS_BUF -DLUAZMQ_USE_TEMP_BUFFERS -DLUAZMQ_USE_ERR_TYPE_OBJECT -IC:\Users\Steve\luatest\zmq/include
lzutils.c
cl /nologo /MD /O2 -c -Fosrc/poller.obj -IC:/Program Files/lua-5.1.5/include src/poller.c -DLUAZMQ_USE_SEND_AS_BUF -DLUAZMQ_USE_TEMP_BUFFERS -DLUAZMQ_USE_ERR_TYPE_OBJECT -IC:\Users\Steve\luatest\zmq/include
poller.c
cl /nologo /MD /O2 -c -Fosrc/zcontext.obj -IC:/Program Files/lua-5.1.5/include src/zcontext.c -DLUAZMQ_USE_SEND_AS_BUF -DLUAZMQ_USE_TEMP_BUFFERS -DLUAZMQ_USE_ERR_TYPE_OBJECT -IC:\Users\Steve\luatest\zmq/include
zcontext.c
cl /nologo /MD /O2 -c -Fosrc/zerror.obj -IC:/Program Files/lua-5.1.5/include src/zerror.c -DLUAZMQ_USE_SEND_AS_BUF -DLUAZMQ_USE_TEMP_BUFFERS -DLUAZMQ_USE_ERR_TYPE_OBJECT -IC:\Users\Steve\luatest\zmq/include
zerror.c
cl /nologo /MD /O2 -c -Fosrc/zmsg.obj -IC:/Program Files/lua-5.1.5/include src/zmsg.c -DLUAZMQ_USE_SEND_AS_BUF -DLUAZMQ_USE_TEMP_BUFFERS -DLUAZMQ_USE_ERR_TYPE_OBJECT -IC:\Users\Steve\luatest\zmq/include
zmsg.c
cl /nologo /MD /O2 -c -Fosrc/zpoller.obj -IC:/Program Files/lua-5.1.5/include src/zpoller.c -DLUAZMQ_USE_SEND_AS_BUF -DLUAZMQ_USE_TEMP_BUFFERS -DLUAZMQ_USE_ERR_TYPE_OBJECT -IC:\Users\Steve\luatest\zmq/include
zpoller.c
cl /nologo /MD /O2 -c -Fosrc/zsocket.obj -IC:/Program Files/lua-5.1.5/include src/zsocket.c -DLUAZMQ_USE_SEND_AS_BUF -DLUAZMQ_USE_TEMP_BUFFERS -DLUAZMQ_USE_ERR_TYPE_OBJECT -IC:\Users\Steve\luatest\zmq/include
zsocket.c
link -dll -def:lzmq.def -out:lzmq.dll C:/Program Files/lua-5.1.5/lua5.1.lib src/lzmq.obj src/lzutils.obj src/poller.obj src/zcontext.obj src/zerror.obj src/zmsg.obj src/zpoller.obj src/zsocket.obj -libpath:C:\Users\Steve\luatest\zmq/lib libzmq.lib
Microsoft (R) Incremental Linker Version 14.10.25019.0
Copyright (C) Microsoft Corporation.  All rights reserved.

lzmq.obj : warning LNK4197: export 'luaopen_lzmq' specified multiple times; using first specification
   Creating library lzmq.lib and object lzmq.exp
LINK : warning LNK4098: defaultlib 'LIBCMT' conflicts with use of other libs; use /NODEFAULTLIB:library
cl /nologo /MD /O2 -c -Fosrc/ztimer.obj -IC:/Program Files/lua-5.1.5/include src/ztimer.c
ztimer.c
cl /nologo /MD /O2 -c -Fosrc/lzutils.obj -IC:/Program Files/lua-5.1.5/include src/lzutils.c
lzutils.c
link -dll -def:timer.def -out:lzmq/timer.dll C:/Program Files/lua-5.1.5/lua5.1.lib src/ztimer.obj src/lzutils.obj
Microsoft (R) Incremental Linker Version 14.10.25019.0
Copyright (C) Microsoft Corporation.  All rights reserved.

ztimer.obj : warning LNK4197: export 'luaopen_lzmq_timer' specified multiple times; using first specification
   Creating library lzmq/timer.lib and object lzmq/timer.exp
LINK : warning LNK4098: defaultlib 'LIBCMT' conflicts with use of other libs; use /NODEFAULTLIB:library
No existing manifest. Attempting to rebuild...
lzmq 0.4.3-1 is now installed in C:/Users/Steve/luatest/lua (license: MIT/X11)

My failing test is below. It can definitely find the dll file because it throws a different error if I rename the dll file.

PS C:\Users\Steve\luatest> lua5.1.exe
Lua 5.1.5  Copyright (C) 1994-2012 Lua.org, PUC-Rio
> package.path = package.path..";C:\\Users\\Steve\\luatest\\lua\\share\\lua\\5.1\\?.lua"
> package.cpath = package.cpath..";C:\\Users\\Steve\\luatest\\lua\\lib\\lua\\5.1\\?.dll"
> local zmq = require("lzmq")
error loading module 'lzmq' from file 'C:\Users\Steve\luatest\lua\lib\lua\5.1\lzmq.dll':
        The specified module could not be found.

stack traceback:
        [C]: ?
        [C]: in function 'require'
        stdin:1: in main chunk
        [C]: ?

lzmq not working in win32 - LuaDist

I have a fresh intallation of LuaDist, lua5.1 with lzmq.

When I run
C:\lua\share\lzmq\example\perf2\thr>lua inproc_thr.lua 100 100

or any other program using lzmq inside a thread, everything crashes. I tried any available libzmq.dll ( From zeromq, LuaDist, Version 3.2, Version 4. etc. ).

Error messages are ( ZeroMQ 4)
Error from thread: [UNKNOWN] Connection refused (107)
stack traceback:
[C]: in function 'zassert'
./local_thr.lua:25: in main chunk
(tail call): ?

Or (ZeroMq 3.2)
C:\lua\share\lzmq\example\perf2\thr>lua inproc_thr.lua 100 100
Assertion failed: Connection refused (......\src\signaler.cpp:359)

Is this maybe a problem with LuaDist lua.exe ?

luarocks package not working

Installing lzmq-ffi or lzmq doesn't work as expected, the require fails:

root@e3ceb2a13b61:/usr/src/app# luarocks list
Warning: Failed loading manifest for /root/.luarocks/lib/luarocks/rocks: /root/.luarocks/lib/luarocks/rocks/manifest: No such file or directory

Installed rocks:
----------------

root@e3ceb2a13b61:/usr/src/app# luarocks install lzmq-ffi
Installing https://luarocks.org/lzmq-ffi-0.4.3-1.src.rock...
Using https://luarocks.org/lzmq-ffi-0.4.3-1.src.rock... switching to 'build' mode
Archive:  v0.4.3.zip
72dbca09652bcc8f27a6ae2662f05d8220e25a2f
   creating: lzmq-0.4.3/
  inflating: lzmq-0.4.3/.gitignore
  inflating: lzmq-0.4.3/.travis.yml
   creating: lzmq-0.4.3/.travis/
  inflating: lzmq-0.4.3/.travis/platform.sh
  inflating: lzmq-0.4.3/.travis/setup_lua.sh
  inflating: lzmq-0.4.3/.travis/setup_sodium.sh
  inflating: lzmq-0.4.3/.travis/setup_zmq.sh
  inflating: lzmq-0.4.3/CMakeLists.txt
  inflating: lzmq-0.4.3/LICENCE.txt
  inflating: lzmq-0.4.3/README.md
   creating: lzmq-0.4.3/cmake/
  inflating: lzmq-0.4.3/cmake/FindLua.cmake
  inflating: lzmq-0.4.3/cmake/FindZMQ.cmake
  inflating: lzmq-0.4.3/cmake/dist.cmake
  inflating: lzmq-0.4.3/cmake/lua.cmake
  inflating: lzmq-0.4.3/dist.info
   creating: lzmq-0.4.3/doc/
  inflating: lzmq-0.4.3/doc/lzmq.ldoc
   creating: lzmq-0.4.3/doc/lzmq/
  inflating: lzmq-0.4.3/doc/lzmq/loop.ldoc
  inflating: lzmq-0.4.3/doc/lzmq/poller.ldoc
  inflating: lzmq-0.4.3/doc/lzmq/threads.ldoc
  inflating: lzmq-0.4.3/doc/lzmq/timer.ldoc
   creating: lzmq-0.4.3/examples/
   creating: lzmq-0.4.3/examples/device/
  inflating: lzmq-0.4.3/examples/device/cli.lua
  inflating: lzmq-0.4.3/examples/device/device.lua
  inflating: lzmq-0.4.3/examples/device/srv.lua
  inflating: lzmq-0.4.3/examples/echo_cli.lua
  inflating: lzmq-0.4.3/examples/echo_loop.lua
  inflating: lzmq-0.4.3/examples/echo_loop_raw.lua
  inflating: lzmq-0.4.3/examples/monitor.lua
   creating: lzmq-0.4.3/examples/perf/
  inflating: lzmq-0.4.3/examples/perf/local_lat.lua
  inflating: lzmq-0.4.3/examples/perf/local_multipart.lua
  inflating: lzmq-0.4.3/examples/perf/local_thr.lua
  inflating: lzmq-0.4.3/examples/perf/remote_lat.lua
  inflating: lzmq-0.4.3/examples/perf/remote_multipart.lua
  inflating: lzmq-0.4.3/examples/perf/remote_thr.lua
  inflating: lzmq-0.4.3/examples/perf/test_lat.bat
  inflating: lzmq-0.4.3/examples/perf/test_multipart.bat
  inflating: lzmq-0.4.3/examples/perf/test_thr.bat
  inflating: lzmq-0.4.3/examples/perf/thread_lat.lua
  inflating: lzmq-0.4.3/examples/perf/thread_thr.lua
   creating: lzmq-0.4.3/examples/perf2/
   creating: lzmq-0.4.3/examples/perf2/lat/
  inflating: lzmq-0.4.3/examples/perf2/lat/inproc_lat.lua
  inflating: lzmq-0.4.3/examples/perf2/lat/local_lat.lua
  inflating: lzmq-0.4.3/examples/perf2/lat/remote_lat.lua
   creating: lzmq-0.4.3/examples/perf2/lat_nomsg/
  inflating: lzmq-0.4.3/examples/perf2/lat_nomsg/inproc_lat.lua
  inflating: lzmq-0.4.3/examples/perf2/lat_nomsg/local_lat.lua
  inflating: lzmq-0.4.3/examples/perf2/lat_nomsg/remote_lat.lua
  inflating: lzmq-0.4.3/examples/perf2/runner.lua
   creating: lzmq-0.4.3/examples/perf2/thr/
  inflating: lzmq-0.4.3/examples/perf2/thr/inproc_thr.lua
  inflating: lzmq-0.4.3/examples/perf2/thr/local_thr.lua
  inflating: lzmq-0.4.3/examples/perf2/thr/remote_thr.lua
   creating: lzmq-0.4.3/examples/perf2/thr_nomsg/
  inflating: lzmq-0.4.3/examples/perf2/thr_nomsg/inproc_thr.lua
  inflating: lzmq-0.4.3/examples/perf2/thr_nomsg/local_thr.lua
  inflating: lzmq-0.4.3/examples/perf2/thr_nomsg/remote_thr.lua
  inflating: lzmq-0.4.3/examples/queue_device.lua
  inflating: lzmq-0.4.3/examples/utils.lua
  inflating: lzmq-0.4.3/examples/uv_actor.lua
  inflating: lzmq-0.4.3/examples/zap.lua
  inflating: lzmq-0.4.3/lakeconfig.lua
  inflating: lzmq-0.4.3/lakefile
   creating: lzmq-0.4.3/msvc/
  inflating: lzmq-0.4.3/msvc/luazmq.sln
  inflating: lzmq-0.4.3/msvc/luazmq.vcproj
  inflating: lzmq-0.4.3/msvc/lztimer.vcproj
   creating: lzmq-0.4.3/rockspecs/
  inflating: lzmq-0.4.3/rockspecs/lzmq-0.1.0-1.rockspec
  inflating: lzmq-0.4.3/rockspecs/lzmq-0.1.1-1.rockspec
  inflating: lzmq-0.4.3/rockspecs/lzmq-0.1.2-1.rockspec
  inflating: lzmq-0.4.3/rockspecs/lzmq-0.1.3-1.rockspec
  inflating: lzmq-0.4.3/rockspecs/lzmq-0.2.0-1.rockspec
  inflating: lzmq-0.4.3/rockspecs/lzmq-0.3.0-1.rockspec
  inflating: lzmq-0.4.3/rockspecs/lzmq-0.3.1-1.rockspec
  inflating: lzmq-0.4.3/rockspecs/lzmq-0.3.2-1.rockspec
  inflating: lzmq-0.4.3/rockspecs/lzmq-0.3.3-1.rockspec
  inflating: lzmq-0.4.3/rockspecs/lzmq-0.3.4-1.rockspec
  inflating: lzmq-0.4.3/rockspecs/lzmq-0.3.5-1.rockspec
  inflating: lzmq-0.4.3/rockspecs/lzmq-0.3.6-1.rockspec
  inflating: lzmq-0.4.3/rockspecs/lzmq-0.4.0-1.rockspec
  inflating: lzmq-0.4.3/rockspecs/lzmq-0.4.1-1.rockspec
  inflating: lzmq-0.4.3/rockspecs/lzmq-0.4.2-1.rockspec
  inflating: lzmq-0.4.3/rockspecs/lzmq-0.4.3-1.rockspec
  inflating: lzmq-0.4.3/rockspecs/lzmq-ffi-0.1.3-1.rockspec
  inflating: lzmq-0.4.3/rockspecs/lzmq-ffi-0.2.0-1.rockspec
  inflating: lzmq-0.4.3/rockspecs/lzmq-ffi-0.3.0-1.rockspec
  inflating: lzmq-0.4.3/rockspecs/lzmq-ffi-0.3.1-1.rockspec
  inflating: lzmq-0.4.3/rockspecs/lzmq-ffi-0.3.2-1.rockspec
  inflating: lzmq-0.4.3/rockspecs/lzmq-ffi-0.3.3-1.rockspec
  inflating: lzmq-0.4.3/rockspecs/lzmq-ffi-0.3.4-1.rockspec
  inflating: lzmq-0.4.3/rockspecs/lzmq-ffi-0.3.5-1.rockspec
  inflating: lzmq-0.4.3/rockspecs/lzmq-ffi-0.3.6-1.rockspec
  inflating: lzmq-0.4.3/rockspecs/lzmq-ffi-0.4.0-1.rockspec
  inflating: lzmq-0.4.3/rockspecs/lzmq-ffi-0.4.1-1.rockspec
  inflating: lzmq-0.4.3/rockspecs/lzmq-ffi-0.4.2-1.rockspec
  inflating: lzmq-0.4.3/rockspecs/lzmq-ffi-0.4.3-1.rockspec
  inflating: lzmq-0.4.3/rockspecs/lzmq-ffi-scm-0.rockspec
  inflating: lzmq-0.4.3/rockspecs/lzmq-scm-0.rockspec
  inflating: lzmq-0.4.3/rockspecs/lzmq-timer-0.1.2-1.rockspec
  inflating: lzmq-0.4.3/rockspecs/lzmq-timer-0.3.5-1.rockspec
  inflating: lzmq-0.4.3/rockspecs/lzmq-timer-0.4.2-1.rockspec
  inflating: lzmq-0.4.3/rockspecs/lzmq-timer-scm-0.rockspec
   creating: lzmq-0.4.3/script/
  inflating: lzmq-0.4.3/script/getsockopt.lua
   creating: lzmq-0.4.3/src/
   creating: lzmq-0.4.3/src/lua/
   creating: lzmq-0.4.3/src/lua/lzmq/
  inflating: lzmq-0.4.3/src/lua/lzmq/ffi.lua
   creating: lzmq-0.4.3/src/lua/lzmq/ffi/
  inflating: lzmq-0.4.3/src/lua/lzmq/ffi/api.lua
  inflating: lzmq-0.4.3/src/lua/lzmq/ffi/error.lua
  inflating: lzmq-0.4.3/src/lua/lzmq/ffi/loop.lua
  inflating: lzmq-0.4.3/src/lua/lzmq/ffi/lzmq.lua
  inflating: lzmq-0.4.3/src/lua/lzmq/ffi/poller.lua
  inflating: lzmq-0.4.3/src/lua/lzmq/ffi/threads.lua
  inflating: lzmq-0.4.3/src/lua/lzmq/ffi/timer.lua
   creating: lzmq-0.4.3/src/lua/lzmq/impl/
  inflating: lzmq-0.4.3/src/lua/lzmq/impl/loop.lua
  inflating: lzmq-0.4.3/src/lua/lzmq/impl/threads.lua
   creating: lzmq-0.4.3/src/lua/lzmq/llthreads/
  inflating: lzmq-0.4.3/src/lua/lzmq/llthreads/ex.lua
  inflating: lzmq-0.4.3/src/lua/lzmq/loop.lua
  inflating: lzmq-0.4.3/src/lua/lzmq/poller.lua
  inflating: lzmq-0.4.3/src/lua/lzmq/threads.lua
  inflating: lzmq-0.4.3/src/lzmq.c
  inflating: lzmq-0.4.3/src/lzmq.def
  inflating: lzmq-0.4.3/src/lzmq.h
  inflating: lzmq-0.4.3/src/lzutils.c
  inflating: lzmq-0.4.3/src/lzutils.h
  inflating: lzmq-0.4.3/src/poller.c
  inflating: lzmq-0.4.3/src/poller.h
  inflating: lzmq-0.4.3/src/timer.def
  inflating: lzmq-0.4.3/src/zcontext.c
  inflating: lzmq-0.4.3/src/zcontext.h
  inflating: lzmq-0.4.3/src/zerror.c
  inflating: lzmq-0.4.3/src/zerror.h
  inflating: lzmq-0.4.3/src/zmsg.c
  inflating: lzmq-0.4.3/src/zmsg.h
  inflating: lzmq-0.4.3/src/zpoller.c
  inflating: lzmq-0.4.3/src/zpoller.h
  inflating: lzmq-0.4.3/src/zsocket.c
  inflating: lzmq-0.4.3/src/zsocket.h
  inflating: lzmq-0.4.3/src/zsupport.h
  inflating: lzmq-0.4.3/src/ztimer.c
  inflating: lzmq-0.4.3/src/ztimer.h
   creating: lzmq-0.4.3/test/
  inflating: lzmq-0.4.3/test/.luacov
  inflating: lzmq-0.4.3/test/.luacov.ffi
   creating: lzmq-0.4.3/test/lunit/
  inflating: lzmq-0.4.3/test/lunit/console.lua
  inflating: lzmq-0.4.3/test/test.lua
  inflating: lzmq-0.4.3/test/test_metadata.lua
  inflating: lzmq-0.4.3/test/test_proxy.lua
  inflating: lzmq-0.4.3/test/test_req_relaxed.lua
  inflating: lzmq-0.4.3/test/test_threads.lua
  inflating: lzmq-0.4.3/test/test_threads_actor.lua
  inflating: lzmq-0.4.3/test/test_threads_actor_poll.lua
  inflating: lzmq-0.4.3/test/test_threads_arg.lua
  inflating: lzmq-0.4.3/test/test_threads_file.lua
  inflating: lzmq-0.4.3/test/test_threads_fork.lua
  inflating: lzmq-0.4.3/test/test_threads_fork_arg.lua
  inflating: lzmq-0.4.3/test/test_threads_fork_opt.lua
  inflating: lzmq-0.4.3/test/test_threads_opt.lua
  inflating: lzmq-0.4.3/test/test_threads_sync.lua
 extracting: lzmq-0.4.3/test/thread.lua
  inflating: lzmq-0.4.3/test/utest.lua
gcc -O2 -fPIC -I/usr/local/include -c src/ztimer.c -o src/ztimer.o
gcc -O2 -fPIC -I/usr/local/include -c src/lzutils.c -o src/lzutils.o
gcc -shared -o lzmq/timer.so -L/usr/local/lib src/ztimer.o src/lzutils.o -lrt
Updating manifest for /usr/local/lib/luarocks/rocks
lzmq-ffi 0.4.3-1 is now built and installed in /usr/local (license: MIT/X11)

root@e3ceb2a13b61:/usr/src/app# luarocks list
Warning: Failed loading manifest for /root/.luarocks/lib/luarocks/rocks: /root/.luarocks/lib/luarocks/rocks/manifest: No such file or directory

Installed rocks:
----------------

lzmq-ffi
   0.4.3-1 (installed) - /usr/local/lib/luarocks/rocks

root@e3ceb2a13b61:/usr/src/app# lua
Lua 5.2.4  Copyright (C) 1994-2015 Lua.org, PUC-Rio
> zmq = require 'lzmq'
/usr/local/share/lua/5.2/lzmq/ffi/api.lua:11: module 'ffi' not found:
        no field package.preload['ffi']
        no file '/usr/local/luarocks/src/ffi.lua'
        no file '/usr/local/share/lua/5.2/ffi.lua'
        no file '/usr/local/share/lua/5.2/ffi/init.lua'
        no file '/usr/local/lib/lua/5.2/ffi.lua'
        no file '/usr/local/lib/lua/5.2/ffi/init.lua'
        no file './ffi.lua'
        no file '/usr/local/luarocks/src/ffi.so'
stack traceback:
        [C]: in function 'require'
        /usr/local/share/lua/5.2/lzmq/ffi/api.lua:11: in main chunk
        [C]: in function 'require'
        /usr/local/share/lua/5.2/lzmq/ffi.lua:29: in main chunk
        [C]: in function 'require'
        /usr/local/share/lua/5.2/lzmq.lua:11: in main chunk
        [C]: in function 'require'
        stdin:1: in main chunk
        [C]: in ?
>

I'm using docker with niaquinto/docker-luarocks image.

Note that using other packages like lua-messagepack it does work:

root@e3ceb2a13b61:/usr/src/app# luarocks install lua-messagepack
Installing https://luarocks.org/lua-messagepack-0.3.3-1.src.rock...
Using https://luarocks.org/lua-messagepack-0.3.3-1.src.rock... switching to 'build' mode
Updating manifest for /usr/local/lib/luarocks/rocks
lua-messagepack 0.3.3-1 is now built and installed in /usr/local (license: MIT/X11)

root@e3ceb2a13b61:/usr/src/app# lua -e 'mp = require("MessagePack") print(mp.pack("hello"):len())'
6

Lzmq not found by Lua

I have some trouble integrating lzmq into my lua script, which is called by the Lua/C++ API.
I use Lua version 5.4 under Ubuntu 20.04.

This is my Lua Code:

#!/usr/local/bin/lua

local function test()
	local lzmq = require "lzmq"  
end

local ok, err_msg = pcall(test, 42)
if not ok then
    print(err_msg)
end

This prints the following error message:
error loading module 'lzmq' from file '/usr/local/lib/lua/5.4/lzmq.so':
/usr/local/lib/lua/5.4/lzmq.so: undefined symbol: lua_checkstack

lzmq is located under /usr/local/lib/lua/5.4/.

I use the following C++ code to load and execute my Lua file:

#include <iostream>
#include <lua.hpp>

using namespace std;

lua_State* L;

int main()
{
	L = luaL_newstate();
	luaL_openlibs(L);
        luaL_dofile(L, "controller.lua");
        lua_close(L);
        cout << "Error? " << error << endl;
}

What can be the reason for this error?

Add new Draft Sockets for CLIENT and SERVER

Hello,
Great library that works very well. I have a need for the newer socket types CLIENT and SERVER. I see that they're in the code in places but not compiled into the final build. Don't know enough to do this myself. I think adding these two socket types would make using the library bindings easier. It would allow me to use one socket pair instead of replicating PAIR sockets for threads and processes spun off from the main thread.

I've built the library but don't know the code well enough to do this myself.
Thanks for building a rock solid binding for Lua to Zero MQ!
John

tcp_keepalive seems not working

I'm using lzmq as client to connect to server, to keep the connection I used following statement

 local skt = context:socket{zmq.DEALER,
                    tcp_keepalive=1,
                    tcp_keepalive_idle=10, -- keep alive every 10 seconds
                    identity=id}

skt:connect("tcp://118.192.91.219:7777")

but aparently the client doesn't keep alive, I used tcpdump to monitor the 7777 port but nothing happens, can sb helps me on this issue?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.