SlideShare a Scribd company logo
Networking
 by Example!
        Noury Bouraqadi
http://car.mines-douai.fr/noury

  "Deep Into Smalltalk" Spring School
     8 march 2011 - Lille, France
2


                   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
3




 Software                          Software
                 Nework

Process                              Process
            Soc
                ke        oc ket
                     t   S

    Bi-directional communication
4




   Device A                          Device B

 Software                              Software
                   Nework

Process                                  Process
              Soc
                  ke        oc ket
                       t   S
5




                Device Z

 Software                          Software
                 Nework

Process                              Process
            Soc
                ke        oc ket
                     t   S
6


                 2 Main
                Transport
                Protocols


          TCP               UDP


Transmission                    User
   Control                    Datagram
  Protocol                    Protocol
7


                  2 Main
                 Transport
                 Protocols


          TCP                UDP


•  Connected                 •  Connection free
   •  Reliable                   •  Unreliable
  •  Streams                    •  Limited size
8


Focus


                 SSH


    POP
                 TCP         SMTP



          HTTP         FTP
9

    Connection
     Handling
     Process




Server



                 Client A
                 Communication
                   Process
10

    Connection
     Handling
     Process




Server



                   Client A
   Communication   Communication
     Process         Process
11

    Connection
     Handling
     Process




Server             Client B
                   Communication
                     Process


                   Client A
   Communication   Communication
     Process         Process
12

    Connection
     Handling
     Process




Server             Client B
   Communication   Communication
     Process         Process


                   Client A
   Communication   Communication
     Process         Process
13

    Connection
     Handling
     Process       Client C
                   Communication
                     Process



Server             Client B
   Communication   Communication
     Process         Process


                   Client A
   Communication   Communication
     Process         Process
14

    Connection
     Handling
     Process       Client C
   Communication   Communication
     Process         Process



Server             Client B
   Communication   Communication
     Process         Process


                   Client A
   Communication   Communication
     Process         Process
15




  Client Socket
 So cketS tream!
1.  Connect to a server
2.  Send a String
3.  Receive a String
4.  Close
16


         Server for Tests

            Serve
                            Unix!
echo "Smalltalk" | nc –lk 12345

    Multiple
                         Port
  connections
                        number
17




|stream|
stream := SocketStream
   openConnectionToHostNamed: 'localhost'
   port: 12345.
[
   stream sendCommand: 'Pharo’.
   Transcript cr; show: (stream nextLineLf).
] ensure: [
   stream close]
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
19


          Client for Tests

              Host
                               Unix!
echo "Smalltalk" | nc localhost 12345


                           Port
                          number
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.]
21




                                      Tw itter
Luc: I’m struggling with the robots
----------
Noury: Which robots? WifiBots or
Robulabs?
----------
                                       like
Luc: I need to setup the internal board of
Robulab #2
----------
22




         Multi-threaded
             Server

                             1 process
                          for connections
   1 process
for each client

                  Sycnrhonization
                     is needed
23




         Multi-threaded
                              fork
             Server

                             1 process
                          for connections
   1 process
for each client   Mutex
                  Sycnrhonization
                     is needed
   critical:
24




Socket   10110101   Socket
  1                   2
         Network
25


        Copying an object !

10@34                         10@34




                              110101
 1011




Socket        10110101    Socket
  1                         2
              Network
26




    ReferenceStream




streamed
           Represen
                      tationOf: 1
                                 0@34
27




Classes should be
  on both sides
28


Remote messaging




     Network
29




proxy               dispatcher




Socket                Socket
  1      10110101       2

         Network
30




                                     id3

                               id1



proxy
                    dispatcher
 id1



Socket                Socket
  1      10110101       2

         Network
31




 Remote
Transcript
32



                      Code
          Proxy    Deployment


                      Message
(De-)Serializing   passing control
   Messages


  Argument           Garbage
    passing         Collection?
 by reference
33




           Proxy


                        Message
                     passing control

doesNotUnderstand:
34




               ReferenceStream



                   unStream: aString
(De-)Serializing
   Messages


streamedRepresentationOf: anObject
35




What           OCEAN
Next?          New Socket
                 Library
Distributed-
  Objects
    (rST)
a Clean, Portable
Networking Library
Current network library
                               ByteArray
 TCP+              IPv4
UDP+…              +IPv6


          Socket              SocketAdress




                                      irty!
 HTTPSocket    SocksSocket
                                     D
                             0%
                           t ested
OCEAN Library
             Socket
   networkLibrary                 NetworkLibraryProxyFactory
   socketID



                                           WindowsLibrary


                                            MacOSLibrary
TcpSocket             UdpSocket


                                            LinuxLibrary


OOP            100%
               tested
                                          NetworkingPlugin
                                           WrapperLibrary
OCEAN Library Lates t
                               ers io n
             Socket           v
   networkLibrary                NetworkLibraryProxyFactory
   socketID



                                          WindowsLibrary


                                           MacOSLibrary
TcpSocket           UdpSocket


                                           LinuxLibrary


               100%      Pharo
OOP                       1.3
               tested
                                         NetworkingPlugin
                                          WrapperLibrary
OCEAN for Pharo 1.3             ALL
                             Primitives !


 Image   Socket         Plugin
         Library       Wrapper



 VM                     Socket
                        Plugin



 OS                   Network API
OCEAN for Pharo 1.4?

                                Posix
Image         Socket
                               Library
              Library
                               Wrapper



VM               Smalltalk       FFI
        OOP        IDE          Plugin



OS                           Posix Library
OCEAN + FFI + Posix

     350
     300
     250
     200                              Ocean
ms




     150                              OldSocket

     100
      50
       0
           Receive 10MB   Send 10MB
Generalization

Image      Library   Library   Library
              A         B         Z



VM                    FFI      Smaller
                                VM

Other OS   API α     API β        API ψ
44

More Related Content

Pharo Networking by Example

  • 1. Networking by Example! Noury Bouraqadi http://car.mines-douai.fr/noury "Deep Into Smalltalk" Spring School 8 march 2011 - Lille, France
  • 2. 2 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
  • 3. 3 Software Software Nework Process Process Soc ke oc ket t S Bi-directional communication
  • 4. 4 Device A Device B Software Software Nework Process Process Soc ke oc ket t S
  • 5. 5 Device Z Software Software Nework Process Process Soc ke oc ket t S
  • 6. 6 2 Main Transport Protocols TCP UDP Transmission User Control Datagram Protocol Protocol
  • 7. 7 2 Main Transport Protocols TCP UDP •  Connected •  Connection free •  Reliable •  Unreliable •  Streams •  Limited size
  • 8. 8 Focus SSH POP TCP SMTP HTTP FTP
  • 9. 9 Connection Handling Process Server Client A Communication Process
  • 10. 10 Connection Handling Process Server Client A Communication Communication Process Process
  • 11. 11 Connection Handling Process Server Client B Communication Process Client A Communication Communication Process Process
  • 12. 12 Connection Handling Process Server Client B Communication Communication Process Process Client A Communication Communication Process Process
  • 13. 13 Connection Handling Process Client C Communication Process Server Client B Communication Communication Process Process Client A Communication Communication Process Process
  • 14. 14 Connection Handling Process Client C Communication Communication Process Process Server Client B Communication Communication Process Process Client A Communication Communication Process Process
  • 15. 15 Client Socket So cketS tream! 1.  Connect to a server 2.  Send a String 3.  Receive a String 4.  Close
  • 16. 16 Server for Tests Serve Unix! echo "Smalltalk" | nc –lk 12345 Multiple Port connections number
  • 17. 17 |stream| stream := SocketStream openConnectionToHostNamed: 'localhost' port: 12345. [ stream sendCommand: 'Pharo’. Transcript cr; show: (stream nextLineLf). ] ensure: [ stream close]
  • 18. 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
  • 19. 19 Client for Tests Host Unix! echo "Smalltalk" | nc localhost 12345 Port number
  • 20. 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.]
  • 21. 21 Tw itter Luc: I’m struggling with the robots ---------- Noury: Which robots? WifiBots or Robulabs? ---------- like Luc: I need to setup the internal board of Robulab #2 ----------
  • 22. 22 Multi-threaded Server 1 process for connections 1 process for each client Sycnrhonization is needed
  • 23. 23 Multi-threaded fork Server 1 process for connections 1 process for each client Mutex Sycnrhonization is needed critical:
  • 24. 24 Socket 10110101 Socket 1 2 Network
  • 25. 25 Copying an object ! 10@34 10@34 110101 1011 Socket 10110101 Socket 1 2 Network
  • 26. 26 ReferenceStream streamed Represen tationOf: 1 0@34
  • 27. 27 Classes should be on both sides
  • 29. 29 proxy dispatcher Socket Socket 1 10110101 2 Network
  • 30. 30 id3 id1 proxy dispatcher id1 Socket Socket 1 10110101 2 Network
  • 32. 32 Code Proxy Deployment Message (De-)Serializing passing control Messages Argument Garbage passing Collection? by reference
  • 33. 33 Proxy Message passing control doesNotUnderstand:
  • 34. 34 ReferenceStream unStream: aString (De-)Serializing Messages streamedRepresentationOf: anObject
  • 35. 35 What OCEAN Next? New Socket Library Distributed- Objects (rST)
  • 37. Current network library ByteArray TCP+ IPv4 UDP+… +IPv6 Socket SocketAdress irty! HTTPSocket SocksSocket D 0% t ested
  • 38. OCEAN Library Socket networkLibrary NetworkLibraryProxyFactory socketID WindowsLibrary MacOSLibrary TcpSocket UdpSocket LinuxLibrary OOP 100% tested NetworkingPlugin WrapperLibrary
  • 39. OCEAN Library Lates t ers io n Socket v networkLibrary NetworkLibraryProxyFactory socketID WindowsLibrary MacOSLibrary TcpSocket UdpSocket LinuxLibrary 100% Pharo OOP 1.3 tested NetworkingPlugin WrapperLibrary
  • 40. OCEAN for Pharo 1.3 ALL Primitives ! Image Socket Plugin Library Wrapper VM Socket Plugin OS Network API
  • 41. OCEAN for Pharo 1.4? Posix Image Socket Library Library Wrapper VM Smalltalk FFI OOP IDE Plugin OS Posix Library
  • 42. OCEAN + FFI + Posix 350 300 250 200 Ocean ms 150 OldSocket 100 50 0 Receive 10MB Send 10MB
  • 43. Generalization Image Library Library Library A B Z VM FFI Smaller VM Other OS API α API β API ψ
  • 44. 44