Indonesian (Bahasa Indonesia) translation by Hasannudin Amin (you can also view the original English article)
Tutorial ini akan memberikan pengenalan pada socket dengan Python dan bagaimana menggunakan modul socket untuk membangun server HTTP dan klien dengan Python. Ini juga akan mencakup Tornado, pustaka jaringan Python yang ideal untuk polling panjang, WebSockets, dan aplikasi lain yang memerlukan koneksi berumur panjang untuk setiap pengguna.
Apakah Socket itu?
Socket adalah penghubung antara dua aplikasi yang dapat berkomunikasi satu sama lain (baik secara lokal pada satu mesin atau secara jarak jauh antara dua mesin di lokasi terpisah).
Pada dasarnya, socket berfungsi sebagai tautan komunikasi antara dua entitas, yaitu server dan klien. Server akan memberikan informasi yang diminta oleh klien. Misalnya, ketika Anda mengunjungi halaman ini, browser membuat socket dan terhubung ke server.
Modul Socket
Untuk membuat socket, Anda menggunakan fungsi socket.socket(), dan sintaksnya sesederhana:
1 |
import socket |
2 |
s= socket.socket (socket_family, socket_type, protocol=0) |
Berikut uraian argumennya:
- socket_family: Mewakili keluarga alamat (dan protokol). Ini bisa berupa AF_UNIX atau AF_INET.
- socket_type: Mewakili jenis soket, dan dapat berupa SOCK_STREAM atau SOCK_DGRAM.
- protocol: Ini adalah argumen opsional, dan biasanya default ke 0.
Setelah mendapatkan objek socket Anda, Anda kemudian dapat membuat server atau klien sesuai keinginan menggunakan metode yang tersedia di modul socket.
Buat Klien Sederhana
Sebelum memulai, mari kita lihat metode socket klien yang tersedia dengan Python.
- s
= socket.socket(socket.AF_INET, socket.SOCK_STREAM)
-
s.connect(): Memulai koneksi server TCP.
Untuk membuat socket baru, Anda harus mengimpor metode socket kelas socket terlebih dahulu.
1 |
import socket |
Selanjutnya, kita akan membuat soket aliran (TCP) sebagai berikut:
1 |
stream_socket = socket.socket( socket.AF_INET, socket.SOCK_STREAM ) |
Argumen AF_INET menunjukkan bahwa Anda meminta socket Internet Protocol (IP), khususnya IPv4. Argumen kedua adalah jenis protokol transport SOCK_STREAM untuk soket TCP. Selain itu, Anda juga dapat membuat socket IPv6 dengan menentukan argumen socket AF_INET6.
Tentukan server.
1 |
server = "localhost" |
Tentukan port yang ingin kita komunikasikan.
1 |
port =80 |
Hubungkan soket ke port tempat server mendengarkan.
1 |
server_address = ((host, port)) |
2 |
stream_socket.connect(server_address) |
3 |
Penting untuk dicatat bahwa host dan port harus berupa tuple.
Kirim permintaan data ke server:
1 |
message = 'message' |
2 |
stream_socket.sendall(message) |
Dapatkan respon dari server:
1 |
data = sock.recv(10) |
2 |
print data |
Untuk menutup soket yang terhubung, Anda menggunakan metode tutup:
1 |
stream_socket.close() |
Di bawah ini adalah kode lengkap untuk Klien / Server.
1 |
import socket |
2 |
import sys |
3 |
|
4 |
# Create a TCP/IP socket
|
5 |
stream_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) |
6 |
|
7 |
# Define host
|
8 |
host = 'localhost' |
9 |
|
10 |
# define the communication port
|
11 |
port = 8080 |
12 |
|
13 |
# Connect the socket to the port where the server is listening
|
14 |
server_address = ((host, port)) |
15 |
|
16 |
print "connecting" |
17 |
|
18 |
stream_socket.connect(server_address) |
19 |
|
20 |
|
21 |
# Send data
|
22 |
message = 'message' |
23 |
stream_socket.sendall(message) |
24 |
|
25 |
# response
|
26 |
data = stream_socket.recv(10) |
27 |
print data |
28 |
|
29 |
|
30 |
print 'socket closed' |
31 |
stream_socket.close() |
Bangun Server Sederhana
Sekarang mari kita lihat server Python sederhana. Berikut ini adalah metode server socket yang tersedia dengan Python.
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)-
s.bind(): Mengikat alamat (nama host, nomor port) ke soket. -
s.listen(): Mengatur dan memulai pendengar TCP. -
s.accept(): Menerima koneksi klien TCP.
Kami akan mengikuti langkah-langkah berikut:
- Buat socket.
- Ikat soket ke port.
- Mulai menerima koneksi pada soket.
Di sini adalah program server.
1 |
import socket |
2 |
import sys |
3 |
|
4 |
# Create a TCP/IP socket
|
5 |
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) |
6 |
|
7 |
# Define host
|
8 |
host = 'localhost' |
9 |
|
10 |
# define the communication port
|
11 |
port = 8080 |
12 |
|
13 |
# Bind the socket to the port
|
14 |
sock.bind((host, port)) |
15 |
# Listen for incoming connections
|
16 |
sock.listen(1) |
17 |
|
18 |
# Wait for a connection
|
19 |
print 'waiting for a connection' |
20 |
connection, client = sock.accept() |
21 |
|
22 |
print client, 'connected' |
23 |
|
24 |
# Receive the data in small chunks and retransmit it
|
25 |
|
26 |
data = connection.recv(16) |
27 |
print 'received "%s"' % data |
28 |
if data: |
29 |
|
30 |
connection.sendall(data) |
31 |
else: |
32 |
print 'no data from', client |
33 |
|
34 |
|
35 |
# Close the connection
|
36 |
connection.close() |
Server sekarang siap untuk koneksi masuk.
Sekarang jalankan program klien dan server di jendela terminal terpisah, sehingga mereka dapat berkomunikasi satu sama lain.
Keluaran Server
1 |
$ python server.py
|
2 |
waiting for a connection
|
3 |
('127.0.0.1', 47050) connected |
4 |
received "message"
|
Keluaran Klien
1 |
$ python client.py
|
2 |
connecting |
3 |
message |
4 |
socket closed |
Framework Tornado
Framework Tornado adalah salah satu pustaka yang tersedia untuk pemrograman jaringan dengan Python. Di bagian ini, kita akan membahas pustaka ini dan menunjukkan cara menggunakannya untuk membangun WebSockets.
Tornado adalah framework web Python dan pustaka jaringan tidak sinkron. Tornado menggunakan jaringan non-blocking I/O, dan karenanya mampu melakukan scaling ke puluhan ribu koneksi terbuka. Sifat ini membuatnya ideal untuk polling panjang, WebSockets, dan aplikasi lain yang memerlukan koneksi berumur panjang untuk setiap pengguna.
Mari kita membuat Tornado WebSocket sederhana:
1 |
import tornado.ioloop |
2 |
import tornado.web |
3 |
|
4 |
|
5 |
class ApplicationHandler(tornado.web.RequestHandler): |
6 |
|
7 |
def get(self): |
8 |
self.message = message = """<html> |
9 |
<head>
|
10 |
<title>Tornado Framework</title>
|
11 |
|
12 |
</head>
|
13 |
<body
|
14 |
<h2>Welcome to the Tornado framework</h2>
|
15 |
</body>
|
16 |
</html>"""
|
17 |
self.write(message) |
18 |
|
19 |
|
20 |
if __name__ == "__main__": |
21 |
application = tornado.web.Application([ |
22 |
(r"/", ApplicationHandler), |
23 |
])
|
24 |
application.listen(5001) |
25 |
tornado.ioloop.IOLoop.instance().start() |
Dalam kode di atas:
- Kami mendefinisikan kelas
ApplicationHandleryang berfungsi sebagai pawang untuk permintaan dan mengembalikan respons menggunakan metodewrite(). - Metode
mainadalah entri untuk program. -
tornado.web.Applicationmembuat basis untuk aplikasi web dan mengambil kumpulan penangan, yaitu ApplicationHandler. - Aplikasi mendengarkan pada port 5000, dan klien dapat berkomunikasi dengan aplikasi ini menggunakan port yang sama.
-
tornado.ioloop.IOLoop.instance().start()membuat thread nonblocking untuk aplikasi.
Jika kita menjalankan aplikasi, kita akan mendapatkan hasil seperti yang ditunjukkan pada gambar di bawah.



Kesimpulan
Sekarang Anda harus memahami dasar-dasar pemrograman socket dengan Python dan bagaimana Anda dapat membangun server dan klien yang sederhana. Jangan ragu untuk bereksperimen dengan membangun klien obrolan Anda sendiri. Untuk informasi lebih lanjut, kunjungi dokumen Python resmi.
Selain itu, jangan ragu untuk melihat apa yang kami miliki untuk dijual dan untuk belajar di Envato Market, dan jangan ragu untuk mengajukan pertanyaan dan memberikan umpan balik Anda yang berharga menggunakan umpan di bawah ini.



