SlideShare una empresa de Scribd logo
1 de 14
Descargar para leer sin conexión
Pythonによる
Echoサーバのサンプル実装
@ttsubo
2013.9.23
<勉強メモ>
1
1. ブロッキングI/OなEchoサーバ
aaa
aaa
Echoサーバ
クライアント1
$ telnet 127.0.0.1 4000
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
aaa
[Mon Sep 23 14:37:28 2013] aaa
aaaaa
[Mon Sep 23 14:37:31 2013] aaaaa
aa
[Mon Sep 23 14:37:32 2013] aa
クライアント2
aaa $ telnet 127.0.0.1 4000
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
aaa
シングル
スレッド
待ち処理となる
シングルスレッドでEchoサーバを実装すると、複数
クライアントからのアクセスに対応できなかった
$ python tcp_server.py
waiting for connection...
...connected from: ('127.0.0.1', 52201)
2
#!/usr/bin/env python
from socket import *
from time import ctime
HOST = '127.0.0.1' # localhost
PORT = 4000 # choose a random port number
BUFSIZ = 1024 # set buffer size to 1K
ADDR = (HOST, PORT)
def Server(tcpCliSock):
while True:
data = tcpCliSock.recv(BUFSIZ)
if not data:
break
tcpCliSock.send('[%s] %s' % (ctime(), data))
tcpCliSock.close()
def start_tcp_server():
tcpSerSock = socket(AF_INET, SOCK_STREAM)
tcpSerSock.bind(ADDR)
tcpSerSock.listen(5)
print 'waiting for connection...'
while True:
tcpCliSock, addr = tcpSerSock.accept()
print '...connected from:', addr
Server(tcpCliSock)
if __name__ == '__main__':
start_tcp_server()
3
2. ブロッキングI/OなEchoサーバ
aaa
aaa
Echoサーバ
クライアント1
$ telnet 127.0.0.1 4000
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
aaa
[Mon Sep 23 15:09:10 2013] aaa
aaaaa
[Mon Sep 23 15:09:14 2013] aaaaa
aa
[Mon Sep 23 15:12:07 2013] aa
クライアント2
aaa $ telnet 127.0.0.1 4000
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
aaa
[Mon Sep 23 15:09:38 2013] aaa
マルチスレッドでEchoサーバを実装すると、複数ク
ライアントからのアクセスに対応できた
$ python tcp_server_threading.py
waiting for connection...
...connected from: ('127.0.0.1', 52363)
...connected from: ('127.0.0.1', 52370)
aaa
マルチ
スレッド
4
#!/usr/bin/env python
import threading
from socket import *
from time import ctime
HOST = '127.0.0.1' # localhost
PORT = 4000 # choose a random port number
BUFSIZ = 1024 # set buffer size to 1K
ADDR = (HOST, PORT)
def Server(tcpCliSock):
while True:
data = tcpCliSock.recv(BUFSIZ)
if not data:
break
tcpCliSock.send('[%s] %s' % (ctime(), data))
tcpCliSock.close()
def start_tcp_server():
tcpSerSock = socket(AF_INET, SOCK_STREAM)
tcpSerSock.bind(ADDR)
tcpSerSock.listen(5)
print 'waiting for connection...'
while True:
tcpCliSock, addr = tcpSerSock.accept()
print '...connected from:', addr
threading.Thread(target=Server, args=(tcpCliSock,)).start()
if __name__ == '__main__':
start_tcp_server()
5
ユーザからの処理をブロッキングI/Oで処理する場合には、
マルチスレッドでアプリケーションを作成する必要があ
り、スレッド間の同期の問題などが発生するので、細心の
注意が必要になる。
ノンブロッキングI/Oで処理する場合には、1つのスレッド
で複数のコネクションを扱うことが可能となる。
なお、1つのスレッドで複数のユーザからの処理を制御す
るスケジューリング処理は、OSではなくアプリケーショ
ン側で実施しなければならない。
ブロッキングI/O
ノンブロッキングI/O
今回、Eventletに着目してみた。
6
eventletとは
Eventlet is built around the concept of green threads (i.e. coroutines, we use the
terms interchangeably) that are launched to do network-related work. Green threads
differ from normal threads in two main ways:
• Green threads are so cheap they are nearly free. You do not have to conserve
green threads like you would normal threads. In general, there will be at least one
green thread per network connection.
• Green threads cooperatively yield to each other instead of preemptively being
scheduled. The major advantage from this behavior is that shared data structures
don’t need locks, because only if a yield is explicitly called can another green
thread have access to the data structure. It is also possible to inspect primitives
such as queues to see if they have any pending data.
http://eventlet.net/doc/basic_usage.html
7
3. ノンブロッキングI/OなEchoサーバ
aaa
aaa
Echoサーバ
クライアント1
$ telnet 127.0.0.1 4000
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
aaa
[Mon Sep 23 15:55:56 2013] aaa
aaaaa
[Mon Sep 23 15:55:59 2013] aaaaa
aa
[Mon Sep 23 15:56:13 2013] aa
クライアント2
aaa $ telnet 127.0.0.1 4000
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
aaa
[Mon Sep 23 15:56:10 2013] aaa
シングル
スレッド
まず、Eventletのmonkey_patchで、対応してみた。
$ python tcp_server_threading_monkeypatch.py
waiting for connection...
...connected from: ('127.0.0.1', 52584)
...connected from: ('127.0.0.1', 52585)
aaa
8
#!/usr/bin/env python
import eventlet; eventlet.monkey_patch()
import threading
from socket import *
from time import ctime
HOST = '127.0.0.1' # localhost
PORT = 4000 # choose a random port number
BUFSIZ = 1024 # set buffer size to 1K
ADDR = (HOST, PORT)
def Server(tcpCliSock):
while True:
data = tcpCliSock.recv(BUFSIZ)
if not data:
break
tcpCliSock.send('[%s] %s' % (ctime(), data))
tcpCliSock.close()
def start_tcp_server():
tcpSerSock = socket(AF_INET, SOCK_STREAM)
tcpSerSock.bind(ADDR)
tcpSerSock.listen(5)
print 'waiting for connection...'
while True:
tcpCliSock, addr = tcpSerSock.accept()
print '...connected from:', addr
threading.Thread(target=Server, args=(tcpCliSock,)).start()
if __name__ == '__main__':
start_tcp_server()
ブロッキングI/Oでのマルチスレッド
プログラミングと、ほぼ同一のまま、
ノンブロッキングI/O処理が実現可能
9
4. ノンブロッキングI/OなEchoサーバ
aaa
aaa
Echoサーバ
クライアント1
$ telnet 127.0.0.1 4000
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
aaa
[Mon Sep 23 15:45:12 2013] aaa
aaaaa
[Mon Sep 23 15:45:15 2013] aaaaa
aa
[Mon Sep 23 15:45:38 2013] aa
クライアント2
aaa $ telnet 127.0.0.1 4000
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
aaa
[Mon Sep 23 15:45:26 2013] aaa
シングル
スレッド
$ python tcp_server_eventlet.py
waiting for connection...
...connected from: ('127.0.0.1', 52524)
...connected from: ('127.0.0.1', 52525)
aaa
次に、Eventletの各種APIを活用して、対応してみた。
10
#!/usr/bin/env python
import eventlet
from time import ctime
HOST = '127.0.0.1' # localhost
PORT = 4000 # choose a random port number
BUFSIZ = 1024 # set buffer size to 1K
ADDR = (HOST, PORT)
def handler(tcpCliSock, ADDR):
print '...connected from:', ADDR
while True:
data = tcpCliSock.recv(BUFSIZ)
if not data:
break
tcpCliSock.send('[%s] %s' % (ctime(), data))
tcpCliSock.close()
def start_tcp_server():
print 'waiting for connection...'
server = eventlet.listen(ADDR)
eventlet.serve(server, handler)
if __name__ == '__main__':
start_tcp_server()
11
5. ノンブロッキングI/OなEchoサーバ
aaa
aaa
Echoサーバ
クライアント1
$ telnet 127.0.0.1 4000
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
aaa
[Mon Sep 23 16:14:38 2013] aaa
aaaaa
[Mon Sep 23 16:14:40 2013] aaaaa
aa
[Mon Sep 23 16:14:57 2013] aa
クライアント2
aaa $ telnet 127.0.0.1 4000
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
aaa
[Mon Sep 23 16:14:53 2013] aaa
シングル
スレッド
$ python tcp_server_eventlet_queue.py
waiting for connection...
...connected from: ('127.0.0.1', 52622)
...connected from: ('127.0.0.1', 52623)
aaa
最後に、Eventletのqueue活用して、対応してみた。
queue
queue
put
get
put
get
12
#!/usr/bin/env python
import eventlet
from time import ctime
HOST = '127.0.0.1' # localhost
PORT = 4000 # choose a random port number
BUFSIZ = 1024 # set buffer size to 1K
ADDR = (HOST, PORT)
def _recv_loop(queue, sock):
while True:
data = sock.recv(4096)
if len(data) == 0:
break
queue.put(data)
def _send_loop(queue, sock):
while True:
data = queue.get()
if not data:
break
sock.sendall('[%s] %s' % (ctime(), data))
def serve(queue, sock):
eventlet.spawn(_send_loop, queue, sock)
_recv_loop(queue, sock)
def start_tcp_server():
print 'waiting for connection...'
server = eventlet.listen(ADDR)
while True:
sock, addr = server.accept()
print '...connected from:', addr
tx_queue = eventlet.queue.Queue()
eventlet.spawn(serve, tx_queue, sock)
if __name__ == '__main__':
start_tcp_server()
13
ノンブロッリングI/OをEventlet活用して
Echoサーバを実装してみた。
感覚的には、シングルスレッド的に実装で
きるところが、Good !!
あと、ネイティブスレッドと異なり、
グリーンスレッドは、ユーザ空間で動作する
ので、グリーンスレッド切り替え処理をプロ
グラマ側で制御できるのが利点らしい。
まだまだ、API活用事例が少ないため、
英語ドキュメントの読解力が必要みたい。
14

Más contenido relacionado

La actualidad más candente

Docker+CoreOS+GCEで自動スケール分散レイトレ
Docker+CoreOS+GCEで自動スケール分散レイトレDocker+CoreOS+GCEで自動スケール分散レイトレ
Docker+CoreOS+GCEで自動スケール分散レイトレ
peryaudo
 
東京Node学園#3 Domains & Isolates
東京Node学園#3 Domains & Isolates東京Node学園#3 Domains & Isolates
東京Node学園#3 Domains & Isolates
koichik
 
『How to build a High Performance PSGI/Plack Server』のその後と ISUCON3を受けての話題
『How to build a High Performance PSGI/Plack Server』のその後と ISUCON3を受けての話題『How to build a High Performance PSGI/Plack Server』のその後と ISUCON3を受けての話題
『How to build a High Performance PSGI/Plack Server』のその後と ISUCON3を受けての話題
Masahiro Nagano
 
Androsia:一歩先のメモリ内Androidアプリケーションデータの保護 by サミット・アンワル
Androsia:一歩先のメモリ内Androidアプリケーションデータの保護 by サミット・アンワルAndrosia:一歩先のメモリ内Androidアプリケーションデータの保護 by サミット・アンワル
Androsia:一歩先のメモリ内Androidアプリケーションデータの保護 by サミット・アンワル
CODE BLUE
 
知って得するC# LINQ to Objects編
知って得するC# LINQ to Objects編知って得するC# LINQ to Objects編
知って得するC# LINQ to Objects編
Shota Baba
 
ジャパネットQB GPars
ジャパネットQB GParsジャパネットQB GPars
ジャパネットQB GPars
Takahiro Sugiura
 

La actualidad más candente (20)

Docker+CoreOS+GCEで自動スケール分散レイトレ
Docker+CoreOS+GCEで自動スケール分散レイトレDocker+CoreOS+GCEで自動スケール分散レイトレ
Docker+CoreOS+GCEで自動スケール分散レイトレ
 
Open stackceilometer
Open stackceilometerOpen stackceilometer
Open stackceilometer
 
Openresty
OpenrestyOpenresty
Openresty
 
東京Node学園#3 Domains & Isolates
東京Node学園#3 Domains & Isolates東京Node学園#3 Domains & Isolates
東京Node学園#3 Domains & Isolates
 
Deep Dive async/await in Unity with UniTask(UniRx.Async)
Deep Dive async/await in Unity with UniTask(UniRx.Async)Deep Dive async/await in Unity with UniTask(UniRx.Async)
Deep Dive async/await in Unity with UniTask(UniRx.Async)
 
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭するCEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
 
Objective-C のキャストと Swift の型変換を比べてみる #akibaswift
Objective-C のキャストと Swift の型変換を比べてみる #akibaswiftObjective-C のキャストと Swift の型変換を比べてみる #akibaswift
Objective-C のキャストと Swift の型変換を比べてみる #akibaswift
 
静的サイトどこにする?
静的サイトどこにする?静的サイトどこにする?
静的サイトどこにする?
 
[TL06] 日本の第一人者が C# の現状と今後を徹底解説! 「この素晴らしい C# に祝福を!」
[TL06] 日本の第一人者が C# の現状と今後を徹底解説! 「この素晴らしい C# に祝福を!」[TL06] 日本の第一人者が C# の現状と今後を徹底解説! 「この素晴らしい C# に祝福を!」
[TL06] 日本の第一人者が C# の現状と今後を徹底解説! 「この素晴らしい C# に祝福を!」
 
「Grails-1.1を斬る!〜Grails-1.1からのチーム開発〜」
「Grails-1.1を斬る!〜Grails-1.1からのチーム開発〜」「Grails-1.1を斬る!〜Grails-1.1からのチーム開発〜」
「Grails-1.1を斬る!〜Grails-1.1からのチーム開発〜」
 
Node handson
Node handsonNode handson
Node handson
 
Nuxt.js + microCMS + netlify
Nuxt.js + microCMS + netlifyNuxt.js + microCMS + netlify
Nuxt.js + microCMS + netlify
 
Akka Stream x Kinesis at Shinjuku reactive meetup vol2
Akka Stream x Kinesis at Shinjuku reactive meetup vol2Akka Stream x Kinesis at Shinjuku reactive meetup vol2
Akka Stream x Kinesis at Shinjuku reactive meetup vol2
 
『How to build a High Performance PSGI/Plack Server』のその後と ISUCON3を受けての話題
『How to build a High Performance PSGI/Plack Server』のその後と ISUCON3を受けての話題『How to build a High Performance PSGI/Plack Server』のその後と ISUCON3を受けての話題
『How to build a High Performance PSGI/Plack Server』のその後と ISUCON3を受けての話題
 
Project Loom - 限定継続と軽量スレッド -
Project Loom - 限定継続と軽量スレッド - Project Loom - 限定継続と軽量スレッド -
Project Loom - 限定継続と軽量スレッド -
 
葉物野菜を見極めたい!by Keras
葉物野菜を見極めたい!by Keras葉物野菜を見極めたい!by Keras
葉物野菜を見極めたい!by Keras
 
大阪Node学園 六時限目 「generator小咄」
大阪Node学園 六時限目 「generator小咄」大阪Node学園 六時限目 「generator小咄」
大阪Node学園 六時限目 「generator小咄」
 
Androsia:一歩先のメモリ内Androidアプリケーションデータの保護 by サミット・アンワル
Androsia:一歩先のメモリ内Androidアプリケーションデータの保護 by サミット・アンワルAndrosia:一歩先のメモリ内Androidアプリケーションデータの保護 by サミット・アンワル
Androsia:一歩先のメモリ内Androidアプリケーションデータの保護 by サミット・アンワル
 
知って得するC# LINQ to Objects編
知って得するC# LINQ to Objects編知って得するC# LINQ to Objects編
知って得するC# LINQ to Objects編
 
ジャパネットQB GPars
ジャパネットQB GParsジャパネットQB GPars
ジャパネットQB GPars
 

Destacado (6)

Technical report for IPv6 Routing w/ bgp4+ (part2)
Technical report for IPv6 Routing w/ bgp4+ (part2)Technical report for IPv6 Routing w/ bgp4+ (part2)
Technical report for IPv6 Routing w/ bgp4+ (part2)
 
Interop Tokyo 2014
Interop Tokyo 2014Interop Tokyo 2014
Interop Tokyo 2014
 
かたのはなし
かたのはなしかたのはなし
かたのはなし
 
Technical report for IPv6 Routing w/ bgp4+
Technical report for IPv6 Routing w/ bgp4+Technical report for IPv6 Routing w/ bgp4+
Technical report for IPv6 Routing w/ bgp4+
 
OpenStack with OpenFlow
OpenStack with OpenFlowOpenStack with OpenFlow
OpenStack with OpenFlow
 
InterAS MPLS-VPN with RyuBgp
InterAS MPLS-VPN with RyuBgpInterAS MPLS-VPN with RyuBgp
InterAS MPLS-VPN with RyuBgp
 

Similar a Echo server implementation for Python

泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい) 泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい)
Akihiro Kuwano
 
配布用Beginnerならきっと役立つmaster slave環境
配布用Beginnerならきっと役立つmaster slave環境配布用Beginnerならきっと役立つmaster slave環境
配布用Beginnerならきっと役立つmaster slave環境
yut148atgmaildotcom
 
サーバー実装いろいろ
サーバー実装いろいろサーバー実装いろいろ
サーバー実装いろいろ
kjwtnb
 
Sqale の Puppet と Chef (と テスト)
Sqale の Puppet と Chef (と テスト)Sqale の Puppet と Chef (と テスト)
Sqale の Puppet と Chef (と テスト)
hiboma
 
My sql casual_in_fukuoka_vol1
My sql casual_in_fukuoka_vol1My sql casual_in_fukuoka_vol1
My sql casual_in_fukuoka_vol1
Makoto Haruyama
 

Similar a Echo server implementation for Python (20)

泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい) 泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい)
 
サイバーエージェント様 導入事例:OpenStack Fast Track – 若葉マークStackerのStacker教習所 - OpenStack最新...
サイバーエージェント様 導入事例:OpenStack Fast Track – 若葉マークStackerのStacker教習所 - OpenStack最新...サイバーエージェント様 導入事例:OpenStack Fast Track – 若葉マークStackerのStacker教習所 - OpenStack最新...
サイバーエージェント様 導入事例:OpenStack Fast Track – 若葉マークStackerのStacker教習所 - OpenStack最新...
 
配布用Beginnerならきっと役立つmaster slave環境
配布用Beginnerならきっと役立つmaster slave環境配布用Beginnerならきっと役立つmaster slave環境
配布用Beginnerならきっと役立つmaster slave環境
 
MHA on AWS+Rails
MHA on AWS+RailsMHA on AWS+Rails
MHA on AWS+Rails
 
Em synchrony について
Em synchrony についてEm synchrony について
Em synchrony について
 
AlibabaCloudではじめるKubernetes
AlibabaCloudではじめるKubernetesAlibabaCloudではじめるKubernetes
AlibabaCloudではじめるKubernetes
 
サーバー実装いろいろ
サーバー実装いろいろサーバー実装いろいろ
サーバー実装いろいろ
 
SmartNews TechNight Vol5 : SmartNews AdServer 解体新書 / ポストモーテム
SmartNews TechNight Vol5 : SmartNews AdServer 解体新書 / ポストモーテムSmartNews TechNight Vol5 : SmartNews AdServer 解体新書 / ポストモーテム
SmartNews TechNight Vol5 : SmartNews AdServer 解体新書 / ポストモーテム
 
Docker hands on nifty sakura jul19
Docker hands on nifty sakura jul19Docker hands on nifty sakura jul19
Docker hands on nifty sakura jul19
 
Azure Fabric Service Reliable Collection
Azure Fabric Service Reliable CollectionAzure Fabric Service Reliable Collection
Azure Fabric Service Reliable Collection
 
OpenStack Grizzly構築手順書
OpenStack Grizzly構築手順書OpenStack Grizzly構築手順書
OpenStack Grizzly構築手順書
 
Sqale の Puppet と Chef (と テスト)
Sqale の Puppet と Chef (と テスト)Sqale の Puppet と Chef (と テスト)
Sqale の Puppet と Chef (と テスト)
 
CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...
CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...
CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...
 
並列対決 Elixir × Go × C# x Scala , Node.js
並列対決 Elixir × Go × C# x Scala , Node.js並列対決 Elixir × Go × C# x Scala , Node.js
並列対決 Elixir × Go × C# x Scala , Node.js
 
My sql casual_in_fukuoka_vol1
My sql casual_in_fukuoka_vol1My sql casual_in_fukuoka_vol1
My sql casual_in_fukuoka_vol1
 
インメモリーで超高速処理を実現する場合のカギ
インメモリーで超高速処理を実現する場合のカギインメモリーで超高速処理を実現する場合のカギ
インメモリーで超高速処理を実現する場合のカギ
 
Aerospike deep dive LDTs
Aerospike deep dive LDTsAerospike deep dive LDTs
Aerospike deep dive LDTs
 
実は怖くないDevOps
実は怖くないDevOps実は怖くないDevOps
実は怖くないDevOps
 
メタメタプログラミングRuby
メタメタプログラミングRubyメタメタプログラミングRuby
メタメタプログラミングRuby
 
シスコ装置を使い倒す!組込み機能による可視化からセキュリティ強化
シスコ装置を使い倒す!組込み機能による可視化からセキュリティ強化シスコ装置を使い倒す!組込み機能による可視化からセキュリティ強化
シスコ装置を使い倒す!組込み機能による可視化からセキュリティ強化
 

Más de Toshiki Tsuboi

SDN Lab環境でのRobotFramework実践活用
SDN Lab環境でのRobotFramework実践活用SDN Lab環境でのRobotFramework実践活用
SDN Lab環境でのRobotFramework実践活用
Toshiki Tsuboi
 
BGP/MPLS-VPNのお勉強資料
BGP/MPLS-VPNのお勉強資料BGP/MPLS-VPNのお勉強資料
BGP/MPLS-VPNのお勉強資料
Toshiki Tsuboi
 

Más de Toshiki Tsuboi (11)

GoBGP活用によるSD-WANプラクティス
GoBGP活用によるSD-WANプラクティスGoBGP活用によるSD-WANプラクティス
GoBGP活用によるSD-WANプラクティス
 
SDNアプローチによるBGP経路監視の提案
SDNアプローチによるBGP経路監視の提案SDNアプローチによるBGP経路監視の提案
SDNアプローチによるBGP経路監視の提案
 
BMP活用による SDN時代のオーバレイNW監視手法の提案
BMP活用による SDN時代のオーバレイNW監視手法の提案BMP活用による SDN時代のオーバレイNW監視手法の提案
BMP活用による SDN時代のオーバレイNW監視手法の提案
 
SDN Lab環境でのRobotFramework実践活用
SDN Lab環境でのRobotFramework実践活用SDN Lab環境でのRobotFramework実践活用
SDN Lab環境でのRobotFramework実践活用
 
BGP/MPLS-VPNのお勉強資料
BGP/MPLS-VPNのお勉強資料BGP/MPLS-VPNのお勉強資料
BGP/MPLS-VPNのお勉強資料
 
RyuBGPSpeakerを活用したOpenFlow簡易ルータを試してみた
RyuBGPSpeakerを活用したOpenFlow簡易ルータを試してみたRyuBGPSpeakerを活用したOpenFlow簡易ルータを試してみた
RyuBGPSpeakerを活用したOpenFlow簡易ルータを試してみた
 
OpenFlow in Raspberry Pi
OpenFlow in Raspberry PiOpenFlow in Raspberry Pi
OpenFlow in Raspberry Pi
 
Evaluation of OpenFlow in RB750GL
Evaluation of OpenFlow in RB750GLEvaluation of OpenFlow in RB750GL
Evaluation of OpenFlow in RB750GL
 
RouterBOARD with OpenFlow
RouterBOARD with OpenFlowRouterBOARD with OpenFlow
RouterBOARD with OpenFlow
 
OpenFlow Group Table
OpenFlow Group TableOpenFlow Group Table
OpenFlow Group Table
 
TremaDay #2
TremaDay #2TremaDay #2
TremaDay #2
 

Último

Último (11)

Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 

Echo server implementation for Python