Bilgisayar - Sunucu - Bilgisayar iletişimini sağlama

Merhabalar;

Python ile bir sunucuya bağlanıp ona veri gönderebiliyorum. Fakat sunucuya gönderdiğim veriyi başka bilgisayara veri gönderemiyorum. Bu çok açıklayıcı olmadı. Şöyle izah edeyim: Diyelim sunucuyla çalışan bir chat programı yapıyoruz. Bilgisayar tarafı bir yandan sunucuyu dinlerken bir yandan da mesaj gönderebiliyor. Mesaj gönderdi diyelim sunucu bunu aldı, kendisine bağlı başka bilgisayara bunu nasıl gönderecek?

Umarım derdimi anlatabilmişimdir.

Websocket modülleri tam aradığınız şeyler. Django için channels var:
https://channels.readthedocs.io/en/latest/

Haberleşme için sunucu tarafında CGI, bilgisayar ortamında ise requests modülünü kullanıyorum. websocket ’ e bakacağım.

Threading ile olmaz mı ?

Ya da socket server framework kullanabilirsiniz .

Onunla ilgili örneği nilgisyara geçebilirisem atarım o da iyidir .

Hangi protokol?

BSD arayuzuyle soket programlarken (socket(2), bind(2), connect(2)/listen(2)+accept(2), send(2)/recv(2)) en kolayi sunucu tarafinda bir thread’de baglanti kabul ederken, her baglanti icin ayri bir thread acmak.

Ben sanırım anlatamadım, bir de şunu okuyun:

Örneğin benim sunucum kendisine gelen DATA verisini kendisine bağlı olan herkese gönderecek. Yani herhangi bir kullanıcı post metoduyla DATA anahtarını gönderdiğinde değer sunucuya bağlı olan diğer kullanıcılara gidecek. Kod üzerinden gidelim:

#! /usr/bin/python3

print("Content-Type: text/html\n")
import cgi
X = cgi.FieldStorage()
DATA = X.getvalue("DATA", "yok")
# DATA parametresini aldık, peki nasıl diğer kullanıcılara göndereceğiz?

Bir kullanıcı sunucuya bağlandığında default çalışacak dosya sunucuda process olarak çalışır. Başkası bağlanınca farklı process oluşturulur. Peki mesela X bilgisayarı sunucuda yukarıdaki index.py dosyasına bağlanıyor. Sunucuda ayrı bir process oluşturuldu. Y bilgisayarı da bağlandı. Ayrı bir process. Yani aynı python programını aynı anda çalıştırmak gibi. Bunların iletişimini nasıl sağlayacağım?

Çözüm olarak aklıma gelen mesajları bir yandan dosyaya yazarken bir yandan da o dosyayı dinleyen sunucu programını yazsam diye düşündüm. Mesajlar tek dosyaya yazılacak. Farklı processler bu dosyayı okuyarak haberleşecek.

Buna ters bir durum var, dosyayı sadece bir birim çalıştırabilir. Aynı anda farklı birimler bağlanırsa “File Already Exists” hatası alır mıyım diye düşündüm.

Belki bu video bir fikir oluşturabilir.

Evet :​) Kilit nokta benim sorumda sakli:

“Sunucu”, HTTP (web) sunucusu manasina gelmek zorunda degil. Mesela sunucuyu Quake III sunucusu olarak alirsak cevap https://github.com/id-Software/Quake-III-Arena/blob/master/code/server/sv_main.c#L186 oluyor. Yukaridaki cevabim duz TCP protokolu icin gecerli.

Açıkçası network programlama bilgi düşük. Ama galiba protokol dediğiniz şey http, ftp gibi şeyler. Bunu soruyorsanız ben HTTP://sunucuip adresinden bağlanıyorum.

Protokol, sunucuyla istemcinin arasindaki konusmanin gerceklestigi dil (veya cogunlukla diller butunu.) URL’e yazdigin http protokolun ismi, evet, ve oraya yazmanin hemen ardindan gerceklesecek konusmanin nasil olacagini belirliyor.

@aib , HTTP protokolüyle chat uygulaması mümkün değil mi? Veya bu iş için daha uygun bir protokol var mıdır? Ayrıca HTTP’den başka popüler bir protokol gösterebilir misiniz? Teşekkürler.

1-) Http protokolü kullanılarak bir chat uygulaması yapılabilir

2-)bunun için protokol kullanmayadabilirsin
Mesela 55486 numaralı porttan dinlersin bağlantıları. Socketserver framework var araştırabilirsin. Twisted framework var ona bakabilirsin bunlar işine yarar bence.

3-)Https bir popüler protokol 443. Porttan hizmet sağlar. Ftp, smtp, ssh, telnet, snmp vs. Vs. Bir sürü protokol var ve farklı amaçları var.

HTTP, WWW icin tasarlandigi icin basit bir chat uygulamasina cok musait degil. HTTP sunucusu uzerinden WebSocket konusan kutuphaneler var, socket.io gibi, onlar isi cok daha kolaylastiracaktir.

HTTP’nin altinda calisan, tanim geregi daha populer olan TCP protokolu var. Sadece cift yonlu veri akitmak icin tasarlandigi icin bu is icin bicilmis kaftan. Hatta her TCP uygulamasi bir chat uygulamasi gibi dusunulebilir.

“Protokol” cok genis bir laf; degisik seviyelerde calisip degisik isler basaran milyonlarca protokol var. Alakasiz, rastgele bir liste:
IP, TCP, Ethernet, PPP, TLS, HTTP, 802.11

TCP/UDP uzerine kurulularin ufak bir listesi: https://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.txt

Bu da TCP.

1 Beğeni