読者です 読者をやめる 読者になる 読者になる

non vorrei lavorare

ブログ名の通りです。javascript three.js mruby rust OCaml golang julialang blender

JulialangにHTTP2サーバーをさせたら

はじめに

この記事は、@kjunichiの2015年パーソナルアドベントカレンダーの10日目の記事です。

libtrusterdで超簡単にJuliでHTTP2サーバーを作ってみたが

libtrusterdという自分が開発を進めているHTTP2サーバーを実現するmrubyが組み込まれた共有ライブラリを Juliaから呼び出すことで、Julia(0.4.2)でHTTP2サーバーの実装を試みた。

OSXで以下実施。

git clone https://github.com/kjunichi/libtrusterd.git
cd libtrusterd
git clone https://github.com/mruby/mruby.git
cd mruby
cp -f ../build_config.rb .
PKG_CONFIG_PATH=/usr/local/opt/zlib/lib/pkgconfig:/usr/local/opt/openssl/lib/pkgconfig CXXFLAGS="-I/usr/local/opt/libev/include" CFLAGS="-I/usr/local/opt/libev/include -I/usr/local/opt/openssl/include" LDFLAGS="-L/usr/local/lib -L/usr/local/opt/openssl/lib" rake
cd ..
rake
cd example

Juliaのコード部分

以下のような短いJuliaのコードで、何と!JuliaでHTTP2サーバーが実現!

としたかったが、

function mycallback(script::Cstring)
#       println("Hello, world! from Julialang")
    println(bytestring(script))
        return convert(Cint,0)::Cint
end

const mycallback_c = cfunction(mycallback, Cint, (Cstring,))

const confPath = "./test.conf.rb"
m = ccall( (:boot_from_file_path,"../libtrusterd"), Cint, (Cstring,Ptr{Void}),
                                                 confPath, mycallback_c)

結果

微妙に動かない

julia trusterd.jl
Util.write_pid before
Util.write_pid after
nil
nil
warning: don't set run_user, so run with uid=501
#<HTTP2::Server:0x7fbc611593c0>
"test"
class:Call, method:py_exec
this is trusterd!
signal (6): Abort trap: 6
__pthread_kill at /usr/lib/system/libsystem_kernel.dylib (unknown line)

To be continue...

printlnをコメントアウトして、julia側での標準出力を一切行わなければ、 正常に動いているような気もする。もう少し、何かわかると良いのだけど。。。

関連記事