Download - Pharo Networking by Example
![Page 1: Pharo Networking by Example](https://reader033.vdocument.in/reader033/viewer/2022052315/555bde9ad8b42a33078b485f/html5/thumbnails/1.jpg)
Networking by Example!
Noury Bouraqadi http://car.mines-douai.fr/noury
"Deep Into Smalltalk" Spring School 8 march 2011 - Lille, France
![Page 2: Pharo Networking by Example](https://reader033.vdocument.in/reader033/viewer/2022052315/555bde9ad8b42a33078b485f/html5/thumbnails/2.jpg)
Agenda • Networking Basics
– Sockets and protocols – Client vs. Server – Hands-on with SocketStream
• Serving – Connection vs. communication – Hands-on Concurrency!
• Complex interactions – Exchanging objects over a network – Remote messaging Hands-on
2
![Page 3: Pharo Networking by Example](https://reader033.vdocument.in/reader033/viewer/2022052315/555bde9ad8b42a33078b485f/html5/thumbnails/3.jpg)
3
Socket
NeworkSoftware
Process
Software
ProcessSocket
Bi-directional communication
![Page 4: Pharo Networking by Example](https://reader033.vdocument.in/reader033/viewer/2022052315/555bde9ad8b42a33078b485f/html5/thumbnails/4.jpg)
4
Socket
NeworkSoftware
Process
Software
ProcessSocket
Device A Device B
![Page 5: Pharo Networking by Example](https://reader033.vdocument.in/reader033/viewer/2022052315/555bde9ad8b42a33078b485f/html5/thumbnails/5.jpg)
5
Socket
NeworkSoftware
Process
Software
ProcessSocket
Device Z
![Page 6: Pharo Networking by Example](https://reader033.vdocument.in/reader033/viewer/2022052315/555bde9ad8b42a33078b485f/html5/thumbnails/6.jpg)
6
2 Main Transport Protocols
TCP UDP
Transmission Control Protocol
User Datagram Protocol
![Page 7: Pharo Networking by Example](https://reader033.vdocument.in/reader033/viewer/2022052315/555bde9ad8b42a33078b485f/html5/thumbnails/7.jpg)
7
TCP UDP
• Connected • Reliable • Streams
• Connection free • Unreliable
• Limited size
2 Main Transport Protocols
![Page 8: Pharo Networking by Example](https://reader033.vdocument.in/reader033/viewer/2022052315/555bde9ad8b42a33078b485f/html5/thumbnails/8.jpg)
8
TCP
HTTP
Focus
FTP
SMTP POP
SSH
![Page 9: Pharo Networking by Example](https://reader033.vdocument.in/reader033/viewer/2022052315/555bde9ad8b42a33078b485f/html5/thumbnails/9.jpg)
9
Server
Connection Handling Process
Client A
Communication Process
![Page 10: Pharo Networking by Example](https://reader033.vdocument.in/reader033/viewer/2022052315/555bde9ad8b42a33078b485f/html5/thumbnails/10.jpg)
10
Server
Connection Handling Process
Client A
Communication Process
Communication Process
![Page 11: Pharo Networking by Example](https://reader033.vdocument.in/reader033/viewer/2022052315/555bde9ad8b42a33078b485f/html5/thumbnails/11.jpg)
11
Server
Connection Handling Process
Client A
Communication Process
Communication Process
Client B
Communication Process
![Page 12: Pharo Networking by Example](https://reader033.vdocument.in/reader033/viewer/2022052315/555bde9ad8b42a33078b485f/html5/thumbnails/12.jpg)
12
Server
Connection Handling Process
Communication Process
Client A
Communication Process
Communication Process
Client B
Communication Process
![Page 13: Pharo Networking by Example](https://reader033.vdocument.in/reader033/viewer/2022052315/555bde9ad8b42a33078b485f/html5/thumbnails/13.jpg)
13
Server
Connection Handling Process
Communication Process
Client A
Communication Process
Communication Process
Client B
Communication Process
Client C
Communication Process
![Page 14: Pharo Networking by Example](https://reader033.vdocument.in/reader033/viewer/2022052315/555bde9ad8b42a33078b485f/html5/thumbnails/14.jpg)
14
Server
Connection Handling Process
Communication Process
Communication Process
Client A
Communication Process
Communication Process
Client B
Communication Process
Client C
Communication Process
![Page 15: Pharo Networking by Example](https://reader033.vdocument.in/reader033/viewer/2022052315/555bde9ad8b42a33078b485f/html5/thumbnails/15.jpg)
15
Client Socket �
1. Connect to a server�2. Send a String �3. Receive a String �4. Close�
SocketStream !
![Page 16: Pharo Networking by Example](https://reader033.vdocument.in/reader033/viewer/2022052315/555bde9ad8b42a33078b485f/html5/thumbnails/16.jpg)
Server for Tests 16
echo "Smalltalk" | nc –lk 12345 �
Port number�
Multiple�connections �
Unix!Serve�
![Page 17: Pharo Networking by Example](https://reader033.vdocument.in/reader033/viewer/2022052315/555bde9ad8b42a33078b485f/html5/thumbnails/17.jpg)
17
|stream| stream := SocketStream
openConnectionToHostNamed: 'localhost' port: 12345.
[ stream sendCommand: 'Pharo’. Transcript cr; show: (stream nextLineLf).
] ensure: [ stream close]
![Page 18: Pharo Networking by Example](https://reader033.vdocument.in/reader033/viewer/2022052315/555bde9ad8b42a33078b485f/html5/thumbnails/18.jpg)
18
Simplest Possible Server�1. Listen on some port �2. Accept 1 single client connection�3. Send a String �4. Receive a String �5. Close�
![Page 19: Pharo Networking by Example](https://reader033.vdocument.in/reader033/viewer/2022052315/555bde9ad8b42a33078b485f/html5/thumbnails/19.jpg)
Client for Tests 19
echo "Smalltalk" | nc localhost 12345 �
Port number�
Unix!Host �
![Page 20: Pharo Networking by Example](https://reader033.vdocument.in/reader033/viewer/2022052315/555bde9ad8b42a33078b485f/html5/thumbnails/20.jpg)
20
connectionSock := Socket newTCP. [ connectionSock listenOn: 12345 backlogSize: 10. interactSock := connectionSock
waitForAcceptFor: 30. stream := SocketStream on: interactSock. stream sendCommand: 'Pharo Server!’. Transcript cr; show: stream nextLineLf. ] ensure: [ connectionSock closeAndDestroy. stream close.]
![Page 21: Pharo Networking by Example](https://reader033.vdocument.in/reader033/viewer/2022052315/555bde9ad8b42a33078b485f/html5/thumbnails/21.jpg)
21
Luc: I’m struggling with the robots ---------- Noury: Which robots? WifiBots or Robulabs? ---------- Luc: I need to setup the internal board of Robulab #2 ----------
Twitter�like �
![Page 22: Pharo Networking by Example](https://reader033.vdocument.in/reader033/viewer/2022052315/555bde9ad8b42a33078b485f/html5/thumbnails/22.jpg)
22
Multi-threaded Server�
1 process�for connections �
1 process�for each client �
Sycnrhonization �is needed�
![Page 23: Pharo Networking by Example](https://reader033.vdocument.in/reader033/viewer/2022052315/555bde9ad8b42a33078b485f/html5/thumbnails/23.jpg)
23
Multi-threaded Server�
1 process�for connections �
1 process�for each client �
Sycnrhonization �is needed�
fork�
Mutex �
critical: �
![Page 24: Pharo Networking by Example](https://reader033.vdocument.in/reader033/viewer/2022052315/555bde9ad8b42a33078b485f/html5/thumbnails/24.jpg)
24
Socket �1 �
Socket �2 �
10110101 �Network
![Page 25: Pharo Networking by Example](https://reader033.vdocument.in/reader033/viewer/2022052315/555bde9ad8b42a33078b485f/html5/thumbnails/25.jpg)
Copying an object ! 25
Socket �1 �
Socket �2 �
10110101 �Network
1011
10@34 � 10@34 �
110101
![Page 26: Pharo Networking by Example](https://reader033.vdocument.in/reader033/viewer/2022052315/555bde9ad8b42a33078b485f/html5/thumbnails/26.jpg)
26
ReferenceStream�
streamedRepresentationOf: 10@34
![Page 27: Pharo Networking by Example](https://reader033.vdocument.in/reader033/viewer/2022052315/555bde9ad8b42a33078b485f/html5/thumbnails/27.jpg)
Classes should be �on both sides �
27
![Page 28: Pharo Networking by Example](https://reader033.vdocument.in/reader033/viewer/2022052315/555bde9ad8b42a33078b485f/html5/thumbnails/28.jpg)
Remote messaging 28
Network
![Page 29: Pharo Networking by Example](https://reader033.vdocument.in/reader033/viewer/2022052315/555bde9ad8b42a33078b485f/html5/thumbnails/29.jpg)
29
proxy�
Socket �1 �
Socket �2 �10110101 �
dispatcher�
Network
![Page 30: Pharo Networking by Example](https://reader033.vdocument.in/reader033/viewer/2022052315/555bde9ad8b42a33078b485f/html5/thumbnails/30.jpg)
30
proxy�id1 �
Socket �1 �
Socket �2 �10110101 �
dispatcher�
id1 �
Network
id3 �
![Page 31: Pharo Networking by Example](https://reader033.vdocument.in/reader033/viewer/2022052315/555bde9ad8b42a33078b485f/html5/thumbnails/31.jpg)
31
Remote �Transcript �
![Page 32: Pharo Networking by Example](https://reader033.vdocument.in/reader033/viewer/2022052315/555bde9ad8b42a33078b485f/html5/thumbnails/32.jpg)
32
Proxy�
Message�passing control�(De-)Serializing �
Messages�
Garbage �Collection?�
Argument passing �
by reference�
Code�Deployment �
![Page 33: Pharo Networking by Example](https://reader033.vdocument.in/reader033/viewer/2022052315/555bde9ad8b42a33078b485f/html5/thumbnails/33.jpg)
33
Proxy�
Message�passing control�
doesNotUnderstand: �
![Page 34: Pharo Networking by Example](https://reader033.vdocument.in/reader033/viewer/2022052315/555bde9ad8b42a33078b485f/html5/thumbnails/34.jpg)
34
(De-)Serializing �Messages�
ReferenceStream�
streamedRepresentationOf: anObject �
unStream: aString�
![Page 35: Pharo Networking by Example](https://reader033.vdocument.in/reader033/viewer/2022052315/555bde9ad8b42a33078b485f/html5/thumbnails/35.jpg)
35
Distributed-Objects (rST)�
OCEAN �New Socket �
Library �
What Next?
![Page 36: Pharo Networking by Example](https://reader033.vdocument.in/reader033/viewer/2022052315/555bde9ad8b42a33078b485f/html5/thumbnails/36.jpg)
a Clean, Portable Networking Library
![Page 37: Pharo Networking by Example](https://reader033.vdocument.in/reader033/viewer/2022052315/555bde9ad8b42a33078b485f/html5/thumbnails/37.jpg)
Socket
HTTPSocket SocksSocket
SocketAdress
ByteArray TCP+
UDP+… IPv4
+IPv6 IPv4
+IPv6
Current network library
0% tested
Dirty!
![Page 38: Pharo Networking by Example](https://reader033.vdocument.in/reader033/viewer/2022052315/555bde9ad8b42a33078b485f/html5/thumbnails/38.jpg)
TcpSocket UdpSocket
NetworkLibraryProxyFactory
WindowsLibrary
LinuxLibrary
SocketnetworkLibrarysocketID
MacOSLibrary
NetworkingPluginWrapperLibrary
OCEAN Library
OOP 100% tested
![Page 39: Pharo Networking by Example](https://reader033.vdocument.in/reader033/viewer/2022052315/555bde9ad8b42a33078b485f/html5/thumbnails/39.jpg)
TcpSocket UdpSocket
NetworkLibraryProxyFactory
WindowsLibrary
LinuxLibrary
SocketnetworkLibrarysocketID
MacOSLibrary
NetworkingPluginWrapperLibrary
OCEAN Library
Pharo 1.3
Latest
version
OOP 100% tested
![Page 40: Pharo Networking by Example](https://reader033.vdocument.in/reader033/viewer/2022052315/555bde9ad8b42a33078b485f/html5/thumbnails/40.jpg)
VM
Image
OS
Plugin Wrapper
Network API
OCEAN for Pharo 1.3
Socket Plugin
Socket Library
ALL Primitives !
![Page 41: Pharo Networking by Example](https://reader033.vdocument.in/reader033/viewer/2022052315/555bde9ad8b42a33078b485f/html5/thumbnails/41.jpg)
VM
Image
OS
Posix Library
Wrapper
Posix Library
OCEAN for Pharo 1.4?
FFI Plugin
Socket Library
OOP Smalltalk
IDE
![Page 42: Pharo Networking by Example](https://reader033.vdocument.in/reader033/viewer/2022052315/555bde9ad8b42a33078b485f/html5/thumbnails/42.jpg)
OCEAN + FFI + Posix
0
50
100
150
200
250
300
350
Receive 10MB Send 10MB
ms Ocean
OldSocket
![Page 43: Pharo Networking by Example](https://reader033.vdocument.in/reader033/viewer/2022052315/555bde9ad8b42a33078b485f/html5/thumbnails/43.jpg)
VM
Image
Other OS
Library A
Library B
Library Z
API α API β API ψ
Generalization
FFI Smaller VM
![Page 44: Pharo Networking by Example](https://reader033.vdocument.in/reader033/viewer/2022052315/555bde9ad8b42a33078b485f/html5/thumbnails/44.jpg)
44