Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
EN
MU
Uploaded by
Masashi Umezawa
828 views
NanoStrand
Introduction of NanoStrand. Smalltalk bindings for nanomsg.
Software
◦
Read more
1
Save
Share
Embed
Embed presentation
Download
Download to read offline
1
/ 26
2
/ 26
3
/ 26
4
/ 26
5
/ 26
6
/ 26
7
/ 26
8
/ 26
9
/ 26
10
/ 26
11
/ 26
12
/ 26
13
/ 26
14
/ 26
15
/ 26
16
/ 26
17
/ 26
18
/ 26
19
/ 26
20
/ 26
21
/ 26
22
/ 26
23
/ 26
24
/ 26
25
/ 26
26
/ 26
More Related Content
PDF
Raspberry Piにdiskless modeのalpine linuxを導入してみる
by
Kenichiro MATOHARA
PDF
オープンソースカンファレンス大分参加報告 & 勉強会向けサーバを作ってみる
by
Kenichiro MATOHARA
PDF
hpingで作るパケット
by
Takaaki Hoyo
PDF
OpenFlowでいろんなプロトコルを 話そうとするとどうなるか
by
Masaru Oki
PDF
ちょっと古いマシンにLinuxを
by
Kenichiro MATOHARA
PDF
about Tcpreplay
by
@ otsuka752
PDF
Lagopusとvagrant
by
Masaru Oki
PDF
Open flow tunnel extension on lagopus vswitch
by
Masaru Oki
Raspberry Piにdiskless modeのalpine linuxを導入してみる
by
Kenichiro MATOHARA
オープンソースカンファレンス大分参加報告 & 勉強会向けサーバを作ってみる
by
Kenichiro MATOHARA
hpingで作るパケット
by
Takaaki Hoyo
OpenFlowでいろんなプロトコルを 話そうとするとどうなるか
by
Masaru Oki
ちょっと古いマシンにLinuxを
by
Kenichiro MATOHARA
about Tcpreplay
by
@ otsuka752
Lagopusとvagrant
by
Masaru Oki
Open flow tunnel extension on lagopus vswitch
by
Masaru Oki
What's hot
PPTX
「Dockerはいいぞ」 for Laboratory LT
by
ShimpeiIwamaru
PDF
20110205.linux 0.01
by
YAMANE Toshiaki
PDF
マウスを使わないでキーボードで快適に生活する方法(GNU Screen/tmux/byobu/awesome)
by
Kenichiro MATOHARA
PDF
Tarantubeでメッセージキューを使い倒す
by
Masashi Umezawa
PDF
Bossan dentoo
by
kubo39
PDF
#mailerstudy 01 LT POP/IMAP入門
by
Takashi Takizawa
PDF
Open stack+lagopus できるかな
by
Masaru Oki
PDF
Tide - SmalltalkでSPA
by
Masashi Umezawa
PDF
Lagopus performance
by
Masaru Oki
PDF
Boost sg msgpack
by
Takatoshi Kondo
PDF
Janogia20120921 yoshinotakeshi
by
Keisuke Ishibashi
PDF
Nltk for biginer
by
Atsushi Hayakawa
PDF
import dpkt したよ #ssmjp 2014/02/28
by
th0x0472
PDF
Ruby&Active Support for expert 3
by
xibbar
PDF
Rustのタスクモデルについて
by
zigen
PDF
マスタリングJUNOS DHCP
by
ZenSekibe
PPTX
Pub/Sub model, msm, and asio
by
Takatoshi Kondo
PDF
Lagopus, raw socket build
by
Masaru Oki
PDF
Ssaw08 0617
by
Atsushi Tadokoro
「Dockerはいいぞ」 for Laboratory LT
by
ShimpeiIwamaru
20110205.linux 0.01
by
YAMANE Toshiaki
マウスを使わないでキーボードで快適に生活する方法(GNU Screen/tmux/byobu/awesome)
by
Kenichiro MATOHARA
Tarantubeでメッセージキューを使い倒す
by
Masashi Umezawa
Bossan dentoo
by
kubo39
#mailerstudy 01 LT POP/IMAP入門
by
Takashi Takizawa
Open stack+lagopus できるかな
by
Masaru Oki
Tide - SmalltalkでSPA
by
Masashi Umezawa
Lagopus performance
by
Masaru Oki
Boost sg msgpack
by
Takatoshi Kondo
Janogia20120921 yoshinotakeshi
by
Keisuke Ishibashi
Nltk for biginer
by
Atsushi Hayakawa
import dpkt したよ #ssmjp 2014/02/28
by
th0x0472
Ruby&Active Support for expert 3
by
xibbar
Rustのタスクモデルについて
by
zigen
マスタリングJUNOS DHCP
by
ZenSekibe
Pub/Sub model, msm, and asio
by
Takatoshi Kondo
Lagopus, raw socket build
by
Masaru Oki
Ssaw08 0617
by
Atsushi Tadokoro
Viewers also liked
DOC
Mayer, james 2015
by
James Mayer
PDF
Pillarの紹介
by
Masashi Umezawa
PPTX
Podsumowanie 13. edycji akcji charytatywnej "Czapka św. Mikołaja"
by
MRMRybnika
DOC
MAYER, James 2015
by
James Mayer
PDF
BLVC-plannen_Brochure
by
Peter Veringmeier
PPTX
Improving UX checkout
by
Myriam Jessier
DOCX
Islamic Finance Course work (3)
by
Temitope Ologburo
PPTX
Fucking with algorithms
by
Myriam Jessier
PPSX
The Poet in You: A mini-workshop on poetry writing
by
Miguel De Jesús
Mayer, james 2015
by
James Mayer
Pillarの紹介
by
Masashi Umezawa
Podsumowanie 13. edycji akcji charytatywnej "Czapka św. Mikołaja"
by
MRMRybnika
MAYER, James 2015
by
James Mayer
BLVC-plannen_Brochure
by
Peter Veringmeier
Improving UX checkout
by
Myriam Jessier
Islamic Finance Course work (3)
by
Temitope Ologburo
Fucking with algorithms
by
Myriam Jessier
The Poet in You: A mini-workshop on poetry writing
by
Miguel De Jesús
Similar to NanoStrand
PDF
Reading NATS
by
Katsunori Kawaguchi
KEY
2012-09-09.nagoyapm07
by
IWATA Susumu
PDF
VIOPS06: マルチコア時代のコンピューティング活用術
by
VIOPS Virtualized Infrastructure Operators group ARCHIVES
PDF
Em synchrony について
by
Tomoya Kawanishi
PDF
YAPC::Asia2014 - O2O/IoT/Wearable時代におけるWeb以外のネットワーク技術入門
by
Recruit Technologies
PDF
Scala + Finagleの魅力
by
Kota Mizushima
PPTX
Web socket and gRPC
by
TIS Inc
KEY
P2Pって何?
by
Junya Yamaguchi
Reading NATS
by
Katsunori Kawaguchi
2012-09-09.nagoyapm07
by
IWATA Susumu
VIOPS06: マルチコア時代のコンピューティング活用術
by
VIOPS Virtualized Infrastructure Operators group ARCHIVES
Em synchrony について
by
Tomoya Kawanishi
YAPC::Asia2014 - O2O/IoT/Wearable時代におけるWeb以外のネットワーク技術入門
by
Recruit Technologies
Scala + Finagleの魅力
by
Kota Mizushima
Web socket and gRPC
by
TIS Inc
P2Pって何?
by
Junya Yamaguchi
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させること
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で、気軽に高速なネットワークプログラムが書け る ● いろいろなものとつないで楽しみましょう ●
今後の拡張にご期待ください!!
Download