Consuming HTTP Services in Python Transcripts
Chapter: The service landscape
Lecture: Service type: Raw sockets
0:00 Let's begin our exploration of services and consuming services in Python
0:04 by taking a survey of the various types of services
0:07 that we might encounter out there in the world.
0:10 We are going to do this by focusing on the lowest level services
0:13 and moving up in abstractions.
0:16 So the lowest level service that we could have,
0:19 the way that we could talk to the service
0:21 is with using just raw network sockets and just sending bytes on the wire.
0:26 So we would open up a socket with bidirectional communication
0:30 and we would send 00101 over the service and it knows what that means,
0:34 they will say great, 1101 and so on.
0:37 This is the fastest, lowest level, lowest latency way to interact with services,
0:42 so there are benefits here, it's super fast and it's responsive
0:45 because we can actually send custom messages tailor made
0:50 for the types of messages that these two apps exchange,
0:53 it can be extremely low overhead in terms of bandwidth,
0:56 do you need to send four bytes as an integer?
0:59 Well, maybe you just send four bytes and it just knows an integer is coming,
1:02 so literally, there is no wasted sort of packaging on the messages,
1:05 so why aren't all of our services like this, well,
1:09 there is usually way more drawbacks than there are benefits.
1:12 many time this means there is special protocols, you have some app,
1:17 in order to talk to it you have to use an entirely unique protocol just to speak to that.
1:21 And often those don't have standards around them,
1:25 often those are brittle and just not easy to work with, not easy to get started.
1:30 Another problem is proxies and firewalls, especially firewalls.
1:34 So packet inspecting firewalls really hate letting traffic out of the firewall,
1:41 if it's some sort of binary blob.
1:44 They would much rather see some kind of HTTP traffic
1:46 where they can inspect it and make sure that it's all legit and good.
1:49 Also, these often run on non standard ports
1:52 and there can be problems with firewalls as well.
1:55 There are some platform specific issues you run into as well,
1:59 like just above raw sockets, but still more or less sending raw bytes
2:02 are things like on the Windows platform DCOM or .NET remoting,
2:07 on Java we have RMI, remote method invocation
2:12 and these might be sending like in memory representations of some kind of object
2:15 from one .NET app to a .NET server for example,
2:19 and that means it's extremely fragile and really inaccessible
2:26 it's like you have to basically have the same technology on both sides.
2:29 And also, if you look at the network traffic, can you make sense of it?
2:33 I can't, not usually anyway, it's very hard to read just binary blobs,
2:36 it's also hard to debug if things go wrong because you cannot read it,
2:40 okay, but we do have low latency, low bandwidth, high speed raw sockets,
2:46 and that is possible of course in Python.