Enviar búsqueda
Cargar
NanoStrand
•
1 recomendación
•
821 vistas
M
Masashi Umezawa
Seguir
Introduction of NanoStrand. Smalltalk bindings for nanomsg.
Leer menos
Leer más
Software
Denunciar
Compartir
Denunciar
Compartir
1 de 26
Descargar ahora
Descargar para leer sin conexión
Recomendados
Raspberry Piにdiskless modeのalpine linuxを導入してみる
Raspberry Piにdiskless modeのalpine linuxを導入してみる
Kenichiro MATOHARA
オープンソースカンファレンス大分参加報告 & 勉強会向けサーバを作ってみる
オープンソースカンファレンス大分参加報告 & 勉強会向けサーバを作ってみる
Kenichiro MATOHARA
hpingで作るパケット
hpingで作るパケット
Takaaki Hoyo
OpenFlowでいろんなプロトコルを 話そうとするとどうなるか
OpenFlowでいろんなプロトコルを 話そうとするとどうなるか
Masaru Oki
ちょっと古いマシンにLinuxを
ちょっと古いマシンにLinuxを
Kenichiro MATOHARA
about Tcpreplay
about Tcpreplay
@ otsuka752
Lagopusとvagrant
Lagopusとvagrant
Masaru Oki
Open flow tunnel extension on lagopus vswitch
Open flow tunnel extension on lagopus vswitch
Masaru Oki
Recomendados
Raspberry Piにdiskless modeのalpine linuxを導入してみる
Raspberry Piにdiskless modeのalpine linuxを導入してみる
Kenichiro MATOHARA
オープンソースカンファレンス大分参加報告 & 勉強会向けサーバを作ってみる
オープンソースカンファレンス大分参加報告 & 勉強会向けサーバを作ってみる
Kenichiro MATOHARA
hpingで作るパケット
hpingで作るパケット
Takaaki Hoyo
OpenFlowでいろんなプロトコルを 話そうとするとどうなるか
OpenFlowでいろんなプロトコルを 話そうとするとどうなるか
Masaru Oki
ちょっと古いマシンにLinuxを
ちょっと古いマシンにLinuxを
Kenichiro MATOHARA
about Tcpreplay
about Tcpreplay
@ otsuka752
Lagopusとvagrant
Lagopusとvagrant
Masaru Oki
Open flow tunnel extension on lagopus vswitch
Open flow tunnel extension on lagopus vswitch
Masaru Oki
「Dockerはいいぞ」 for Laboratory LT
「Dockerはいいぞ」 for Laboratory LT
ShimpeiIwamaru
20110205.linux 0.01
20110205.linux 0.01
YAMANE Toshiaki
マウスを使わないでキーボードで快適に生活する方法(GNU Screen/tmux/byobu/awesome)
マウスを使わないでキーボードで快適に生活する方法(GNU Screen/tmux/byobu/awesome)
Kenichiro MATOHARA
Tarantubeでメッセージキューを使い倒す
Tarantubeでメッセージキューを使い倒す
Masashi Umezawa
Bossan dentoo
Bossan dentoo
kubo39
#mailerstudy 01 LT POP/IMAP入門
#mailerstudy 01 LT POP/IMAP入門
Takashi Takizawa
Open stack+lagopus できるかな
Open stack+lagopus できるかな
Masaru Oki
Tide - SmalltalkでSPA
Tide - SmalltalkでSPA
Masashi Umezawa
Lagopus performance
Lagopus performance
Masaru Oki
Boost sg msgpack
Boost sg msgpack
Takatoshi Kondo
Janogia20120921 yoshinotakeshi
Janogia20120921 yoshinotakeshi
Keisuke Ishibashi
Nltk for biginer
Nltk for biginer
Atsushi Hayakawa
import dpkt したよ #ssmjp 2014/02/28
import dpkt したよ #ssmjp 2014/02/28
th0x0472
Ruby&Active Support for expert 3
Ruby&Active Support for expert 3
xibbar
Rustのタスクモデルについて
Rustのタスクモデルについて
zigen
マスタリングJUNOS DHCP
マスタリングJUNOS DHCP
ZenSekibe
Pub/Sub model, msm, and asio
Pub/Sub model, msm, and asio
Takatoshi Kondo
Lagopus, raw socket build
Lagopus, raw socket build
Masaru Oki
Ssaw08 0617
Ssaw08 0617
Atsushi Tadokoro
Mayer, james 2015
Mayer, james 2015
James Mayer
Pillarの紹介
Pillarの紹介
Masashi Umezawa
Podsumowanie 13. edycji akcji charytatywnej "Czapka św. Mikołaja"
Podsumowanie 13. edycji akcji charytatywnej "Czapka św. Mikołaja"
MRMRybnika
Más contenido relacionado
La actualidad más candente
「Dockerはいいぞ」 for Laboratory LT
「Dockerはいいぞ」 for Laboratory LT
ShimpeiIwamaru
20110205.linux 0.01
20110205.linux 0.01
YAMANE Toshiaki
マウスを使わないでキーボードで快適に生活する方法(GNU Screen/tmux/byobu/awesome)
マウスを使わないでキーボードで快適に生活する方法(GNU Screen/tmux/byobu/awesome)
Kenichiro MATOHARA
Tarantubeでメッセージキューを使い倒す
Tarantubeでメッセージキューを使い倒す
Masashi Umezawa
Bossan dentoo
Bossan dentoo
kubo39
#mailerstudy 01 LT POP/IMAP入門
#mailerstudy 01 LT POP/IMAP入門
Takashi Takizawa
Open stack+lagopus できるかな
Open stack+lagopus できるかな
Masaru Oki
Tide - SmalltalkでSPA
Tide - SmalltalkでSPA
Masashi Umezawa
Lagopus performance
Lagopus performance
Masaru Oki
Boost sg msgpack
Boost sg msgpack
Takatoshi Kondo
Janogia20120921 yoshinotakeshi
Janogia20120921 yoshinotakeshi
Keisuke Ishibashi
Nltk for biginer
Nltk for biginer
Atsushi Hayakawa
import dpkt したよ #ssmjp 2014/02/28
import dpkt したよ #ssmjp 2014/02/28
th0x0472
Ruby&Active Support for expert 3
Ruby&Active Support for expert 3
xibbar
Rustのタスクモデルについて
Rustのタスクモデルについて
zigen
マスタリングJUNOS DHCP
マスタリングJUNOS DHCP
ZenSekibe
Pub/Sub model, msm, and asio
Pub/Sub model, msm, and asio
Takatoshi Kondo
Lagopus, raw socket build
Lagopus, raw socket build
Masaru Oki
Ssaw08 0617
Ssaw08 0617
Atsushi Tadokoro
La actualidad más candente
(19)
「Dockerはいいぞ」 for Laboratory LT
「Dockerはいいぞ」 for Laboratory LT
20110205.linux 0.01
20110205.linux 0.01
マウスを使わないでキーボードで快適に生活する方法(GNU Screen/tmux/byobu/awesome)
マウスを使わないでキーボードで快適に生活する方法(GNU Screen/tmux/byobu/awesome)
Tarantubeでメッセージキューを使い倒す
Tarantubeでメッセージキューを使い倒す
Bossan dentoo
Bossan dentoo
#mailerstudy 01 LT POP/IMAP入門
#mailerstudy 01 LT POP/IMAP入門
Open stack+lagopus できるかな
Open stack+lagopus できるかな
Tide - SmalltalkでSPA
Tide - SmalltalkでSPA
Lagopus performance
Lagopus performance
Boost sg msgpack
Boost sg msgpack
Janogia20120921 yoshinotakeshi
Janogia20120921 yoshinotakeshi
Nltk for biginer
Nltk for biginer
import dpkt したよ #ssmjp 2014/02/28
import dpkt したよ #ssmjp 2014/02/28
Ruby&Active Support for expert 3
Ruby&Active Support for expert 3
Rustのタスクモデルについて
Rustのタスクモデルについて
マスタリングJUNOS DHCP
マスタリングJUNOS DHCP
Pub/Sub model, msm, and asio
Pub/Sub model, msm, and asio
Lagopus, raw socket build
Lagopus, raw socket build
Ssaw08 0617
Ssaw08 0617
Destacado
Mayer, james 2015
Mayer, james 2015
James Mayer
Pillarの紹介
Pillarの紹介
Masashi Umezawa
Podsumowanie 13. edycji akcji charytatywnej "Czapka św. Mikołaja"
Podsumowanie 13. edycji akcji charytatywnej "Czapka św. Mikołaja"
MRMRybnika
MAYER, James 2015
MAYER, James 2015
James Mayer
BLVC-plannen_Brochure
BLVC-plannen_Brochure
Peter Veringmeier
Improving UX checkout
Improving UX checkout
Myriam Jessier
Islamic Finance Course work (3)
Islamic Finance Course work (3)
Temitope Ologburo
Fucking with algorithms
Fucking with algorithms
Myriam Jessier
The Poet in You: A mini-workshop on poetry writing
The Poet in You: A mini-workshop on poetry writing
Miguel De Jesús
Destacado
(9)
Mayer, james 2015
Mayer, james 2015
Pillarの紹介
Pillarの紹介
Podsumowanie 13. edycji akcji charytatywnej "Czapka św. Mikołaja"
Podsumowanie 13. edycji akcji charytatywnej "Czapka św. Mikołaja"
MAYER, James 2015
MAYER, James 2015
BLVC-plannen_Brochure
BLVC-plannen_Brochure
Improving UX checkout
Improving UX checkout
Islamic Finance Course work (3)
Islamic Finance Course work (3)
Fucking with algorithms
Fucking with algorithms
The Poet in You: A mini-workshop on poetry writing
The Poet in You: A mini-workshop on poetry writing
Similar a NanoStrand
勉強会向けサーバを作ってみる2 / Rasbian jessieを試す/ Google Authenticatorのパスコードを作る
勉強会向けサーバを作ってみる2 / Rasbian jessieを試す/ Google Authenticatorのパスコードを作る
Kenichiro MATOHARA
Hacking Vox and Plagger
Hacking Vox and Plagger
Tatsuhiko Miyagawa
Reading NATS
Reading NATS
Katsunori Kawaguchi
WebRTC SFU mediasoup sample
WebRTC SFU mediasoup sample
mganeko
おまえらこのライブラリ使ってないの? m9 (2013-07)
おまえらこのライブラリ使ってないの? m9 (2013-07)
Toru Furukawa
WebRTC meetup Tokyo 1
WebRTC meetup Tokyo 1
mganeko
Fabricによるcloud stackインストール自動化
Fabricによるcloud stackインストール自動化
hiroyuki nakajima
How to run P4 BMv2
How to run P4 BMv2
Kentaro Ebisawa
サーバー実装いろいろ
サーバー実装いろいろ
kjwtnb
[Basic 6] DNS / ソケット通信 / その他
[Basic 6] DNS / ソケット通信 / その他
Yuto Takei
WebRTC SFU Mediasoup Sample update
WebRTC SFU Mediasoup Sample update
mganeko
plotnetcfg入門 | Introduction to plotnetcfg
plotnetcfg入門 | Introduction to plotnetcfg
Kentaro Ebisawa
ICHIGEKI-MT 2015/03/14
ICHIGEKI-MT 2015/03/14
Yasutaka Hamada
The basic of performance tuning
The basic of performance tuning
Higepon Taro Minowa
Puppet on AWS
Puppet on AWS
Sugawara Genki
tcpdump & xtrabackup @ MySQL Casual Talks #1
tcpdump & xtrabackup @ MySQL Casual Talks #1
Ryosuke IWANAGA
配布用Beginnerならきっと役立つmaster slave環境
配布用Beginnerならきっと役立つmaster slave環境
yut148atgmaildotcom
Havana版 RDO-QuickStart-3 (140421-Havana-RDO-QuickStart-3.pdf)
Havana版 RDO-QuickStart-3 (140421-Havana-RDO-QuickStart-3.pdf)
VirtualTech Japan Inc.
Docker 18.09 新機能
Docker 18.09 新機能
Akihiro Suda
OpenStack + Common Lisp
OpenStack + Common Lisp
irix_jp
Similar a NanoStrand
(20)
勉強会向けサーバを作ってみる2 / Rasbian jessieを試す/ Google Authenticatorのパスコードを作る
勉強会向けサーバを作ってみる2 / Rasbian jessieを試す/ Google Authenticatorのパスコードを作る
Hacking Vox and Plagger
Hacking Vox and Plagger
Reading NATS
Reading NATS
WebRTC SFU mediasoup sample
WebRTC SFU mediasoup sample
おまえらこのライブラリ使ってないの? m9 (2013-07)
おまえらこのライブラリ使ってないの? m9 (2013-07)
WebRTC meetup Tokyo 1
WebRTC meetup Tokyo 1
Fabricによるcloud stackインストール自動化
Fabricによるcloud stackインストール自動化
How to run P4 BMv2
How to run P4 BMv2
サーバー実装いろいろ
サーバー実装いろいろ
[Basic 6] DNS / ソケット通信 / その他
[Basic 6] DNS / ソケット通信 / その他
WebRTC SFU Mediasoup Sample update
WebRTC SFU Mediasoup Sample update
plotnetcfg入門 | Introduction to plotnetcfg
plotnetcfg入門 | Introduction to plotnetcfg
ICHIGEKI-MT 2015/03/14
ICHIGEKI-MT 2015/03/14
The basic of performance tuning
The basic of performance tuning
Puppet on AWS
Puppet on AWS
tcpdump & xtrabackup @ MySQL Casual Talks #1
tcpdump & xtrabackup @ MySQL Casual Talks #1
配布用Beginnerならきっと役立つmaster slave環境
配布用Beginnerならきっと役立つmaster slave環境
Havana版 RDO-QuickStart-3 (140421-Havana-RDO-QuickStart-3.pdf)
Havana版 RDO-QuickStart-3 (140421-Havana-RDO-QuickStart-3.pdf)
Docker 18.09 新機能
Docker 18.09 新機能
OpenStack + Common Lisp
OpenStack + Common Lisp
NanoStrand
1.
NanoStrand Smalltalkで分散ネットワーキング 第77回Smalltalk勉強会 合同会社ソフトウメヤ 梅澤真史
2.
NanoStrandとは?? ● nanomsgのラッパー ● 気軽に高速なネットワークシステムが組めるよう にするためのライブラリ ●
Smalltalk間はもちろん他言語とのやりとりもス ムーズに ● https://github.com/mumez/NanoStrand
3.
nanomsgのこと ● 一言でいうと、Mini ZeroMQ
(in C) ● マルチプラットフォーム ● 様々な通信パターン(Scalability Protocol)を提供 ○ PUSH/PULL, REQ/REP, PUB/SUB, PAIR, SURVEY, BUS ● マルチトランスポート ○ TCPのみならずIPC、INPROCも ● 豊富な言語バインディング ○ http://nanomsg.org/documentation.html
4.
NanoStrandの構成 ● NanoStrand-FFI ○ FFIでnanomsg
APIを呼ぶ部分 ■ nanomsgのAPIをほぼそのまま使っている ■ NativeBoost版のみ (NanoStrand-NativeBoost-FFI) ● Legacy FFI版を作るとSqueakやCuisでも利用可能になる ● DLLCC版だとVisualWorks ● NanoStrand-Core ○ 上記FFI部を使いOO的なAPIを提供する ■ NnSocket(とそのサブクラス群)
5.
インストール(1) ● nanomsgのビルド ○ 32bitのCog
VMを使う場合、32bit指定でコンパイル ○ Windowsの場合は32, 64bit用が両方できるので楽 ● ビルドした共有ライブラリ(libnanomsg)をVMのディレクトリに コピー CFLAGS=-m32 CXXFLAGS=-m32 LDFLAGS=-m32 ./configure
6.
インストール(2) ● ConfigurationOfNanoStrandのロード ● 共有ライブラリを置いていないと定数初期化に失敗する ○
NnNbNanoMessageConstantsプールに値が入らない ○ 失敗した場合、ライブラリを置いて ”NnNbNanoMessageConstants initialize”すること Gofer new url: 'http://smalltalkhub.com/mc/MasashiUmezawa/NanoStrand/main'; package: 'ConfigurationOfNanoStrand'; load. (Smalltalk at: #ConfigurationOfNanoStrand) load
7.
例: PULL/PUSHを書いてみる(1) "Setup PULL
socket" sock1 := NnPullSocket withBind: 'tcp://*:5575'. sock1 onReceiveReady: [:sock | Transcript cr; show: '#PULL: ', sock receive asString]. "Setup PUSH socket" sock2 := NnPushSocket withConnect: 'tcp://127.0.0.1:5575'. sock2 onSendReady: [:sock | sock send: '#PUSH: ', Time now asString]. ● パイプラインな処理 ● NnPullSocketで受信、NnPushSocketで送信
8.
例: PULL/PUSHを書いてみる(2) "Start a
Poller for multiplexing" poller := NnPoller startWithSockets: {sock1. sock2}. ● NnPollerでポーリング ● 異なるプロトコル、エンドポイントのSocketをまとめて登録できる ● 適切なタイミングで、onReceiveReady:, onSendReady:のコールバックが呼 び出される
9.
例: PULL/PUSHを書いてみる(3) 1 seconds
wait. "The process ends after a second" poller stopAndCloseSockets. ● stopAndCloseSocketsでNnPollerを止める ● 実際にはensure:で確実に止めるようにしたほうが良い
10.
結果 ● Transcriptに表示させなければ20000qpsほど捌ける
11.
例: PUB/SUBで他言語との連携 (1) #
PUSHのクライアント起動。"HelloWorld"を1秒ごとに送る $ nanocat --push --connect tcp://127.0.0.1:5585 -- data HelloWorld -i 1 ● クライアント側をnanocatに ○ Cで書かれたnanomsgの公式クライアント。テストに便利。
12.
例: PUB/SUBで他言語との連携 (2) #
SUBのクライアント起動。全てのイベントを受け付ける $ nanocat --sub --connect tcp://127.0.0.1:5586 -A ● PUSHの他、SUB役のクライアントを2つ起動 # SUBのクライアント起動。"Evt:Rem0"イベントを受け付ける $ nanocat --sub --connect tcp://127.0.0.1:5586 --subscribe Evt:Rem0 -A
13.
例: PUB/SUBで他言語との連携 (3) ●
サーバ側はPharo ○ PULLで受け取ったメッセージの数を10で割った余り(rem)を 計算 ○ 余りが0または5のときイベントとしてPUBLISHする
14.
例: PUB/SUBで他言語との連携 (4) received
:= OrderedCollection new. "A message box" "Setup PULL socket" sock1 := NnPullSocket withBind: 'tcp://127.0.0.1:5585'. sock1 onReceiveReady: [:sock | | rec | rec := (sock receiveFor: 200 timeoutDo: ['']) asString. rec ifNotEmpty: [ received add: rec. "Stock the received message" Transcript cr; show: 'Received:', rec, ':', Time now printString]. ].
15.
例: PUB/SUBで他言語との連携 (5) "Setup
PUB socket" sock2 := NnPubSocket withBind: 'tcp://127.0.0.1:5586'. sock2 onSendReady: [:sock | |rem | rem := received size rem: 10. "10で割った余りを出す" "余りが0か5の時、イベントとして送る" rem = 0 ifTrue: [sock send: 'Evt:Rem0:', Time now printString]. rem = 5 ifTrue: [sock send: 'Evt:Rem5:', Time now printString]. ].
16.
例: PUB/SUBで他言語との連携 (6) poller
:= NnPoller new. poller startWithSockets: {sock1. sock2}. 30 seconds wait. poller stopAndCloseSockets. ● 30秒ほどポーリングして終了させる ○ 実際にはensure:を使ってstopさせること
17.
18.
今後は? ● Smalltalk-Smalltalk間 ○ FFI部を充実させ、Squeak,
CuisやVWに展開 ○ シリアライザとしてはMessagePackや StOMPを使える ● 他言語間 ○ Node.jsやVert.xなどとつなぐと広がりがありそう
19.
NanoStrand-RPC ● RPCのI/Fを提供し便利に使えるようにする ○ ZeroMQに対するZeroRPC的な位置づけ ■
http://www.zerorpc.io ● 同期、非同期、oneway(送りっぱなし)をサポートする予定 ○ 現在は同期のみの実装 ○ http://smalltalkhub.com/#!/~MasashiUmezawa/NanoStrand-RPC
20.
例: 足し算サービスの利用 (1) ●
足し算するのみの簡単なサービスクラスを用意 NnRpcSampleService class >> plus: a with: b ^a+b ● #RpcSampleServiceという名前で登録しておく NnRpcServer addService: NnRpcSampleService named: #RpcSampleService
21.
例: 足し算サービスの利用 (2) ●
サーバの起動 server := NnRpcServer bind: 'tcp://127.0.0.1:6677'. server start. ● クライアントの接続、RPC呼び出し client := NnRpcClient connect: 'tcp://127.0.0.1:6677'. client invoke: #RpcSampleService selector: #plus:with: arguments: {1. 2}. ”=> 3”
22.
速度は? ● 500回起動で80ms程度 [500 timesRepeat:
[client invoke: #RpcSampleService selector: #plus: with: arguments: {1. 2}]] timeToRun. ”=> 0:00:00:00.078” ● なかなか速い ● Pure Smalltalkで書かれたRPCライブラリと比べてどうなのだろう か?
23.
Remote Messagint Toolkit
(RMT) ● 昔書いたPure SmalltalkのRPCライブラリ ○ http://smalltalkhub.com/#!/~MasashiUmezawa/RemoteMessagingToolkit ● 同期とonewayをサポート ● 某基幹系で毎日動いている ● Squeak用であったが、最近Pharo用に復活 ○ シリアライザはDataStreamからFuelに置き換えた
24.
RMTで計測 ● 500回起動で1300ms程度 service :=
(RmtTcpService on: 4566) acceptorClass: RmtRpcAcceptor. service start. RmtRpcAcceptor receiverDictionary at: #RpcSampleService put: NnRpcSampleService. client := RmtRpcConnector connect: 'localhost' port: 4566. [500 timesRepeat: [client invoke: #RpcSampleService selector: #plus:with: arguments: {1. 2}]] timeToRun. ”=> 0:00:00:01.33”
25.
RPC系の予定 ● 非同期のサポート ○ Futureを返し、値の取得後にコールバックされる仕組み ●
ORB? ○ 非同期ベースでいまさらORBっぽいものを作りたい ○ E言語に似た感じの何か
26.
まとめ ● NanoStrandで、気軽に高速なネットワークプログラムが書け る ● いろいろなものとつないで楽しみましょう ●
今後の拡張にご期待ください!!
Descargar ahora