Consuming HTTP Services in Python Transcripts
Chapter: The service landscape
Lecture: Service type: Raw sockets

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

Talk Python's Mastodon Michael Kennedy's Mastodon