Bilgisayar - Sunucu - Bilgisayar iletişimini sağlama


#1

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.


#2

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


#3

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


#4

Threading ile olmaz mı ?

Ya da socket server framework kullanabilirsiniz .

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


#5

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.


#6

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.


#7

Belki bu video bir fikir oluşturabilir.


#8

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.


#9

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.


#10

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.