Bir C ++ web ile nasıl arayüz oluşturur (örneğin Google'da)?


12

Google, yıllar boyunca kodladıkları gülünç miktarda C ++ ile tanınır. Yanlışsam beni düzeltin, ancak Google'ın çekirdek arama motorunun büyük bir kısmı C ++ ile yazılmış, değil mi? Nasıl C ++ ile yazılmış bir program alır ve bir web sitesi ile arayüz?

Not: Özellikle Google'ın bunu nasıl yaptığını, genel olarak nasıl yapılabileceğini aramıyorum.


Google, uygulamalarının çoğunu python'da oluşturdu ve şimdi Java da çok kullanılıyor. Google, dil kullanımını kısıtlamaz. Web arayüzü için soket kullanılır. C ++ 'dan başka bir şey değil, C apis. C ++ kendi sahip değil !!
user1708086

Yanıtlar:


16

Herhangi bir web yazılımı yalnızca soketler aracılığıyla mesaj gönderir ve alır, hepsi bu. Bunu yapmak için herhangi bir dili kullanabilirsiniz, dillere özgü değildir.

Ancak, bu tür işler için tekerleği yeniden icat etmemeniz daha iyi olur, böylece web uygulamalarını yapmak için kullanılan çoğu dil, projenizin özelliklerine konsantre olmanızı sağlamak için sizin için temel iletişimi yapan çerçeve setine sahiptir. Ruby var ROR, Python Django ve diğerleri, Java gibi ... vb.

C ++ geçmişe kadar yakın zamana kadar benzer bir çerçeveye sahip değildi:

  • Bunu yapmanın modern-C ++ yolu CPPCMS gibi bir şey kullanmaktır ;
  • web geliştirici için standart bir kütüphane kurma çabası da vardır. C ++ 'da, bunlardan biri cpp-netlib ;
  • Son zamanlarda, Casablanca adlı Microsoft'tan C ++ 11 için bir çapraz platform REST API kütüphanesi yayımlandı ;

Şimdi, Google'ın oluşturduğu "gülünç miktarda C ++" gereklidir, çünkü Google'ın çözdüğü sorunları çözmek için çok yüksek performanslı modüllere ihtiyacınız vardır. Performansa odaklanan bir dilde yazılmış herhangi bir modül olmadan da aynı şeyi yapmaya çalışmak iyi şanslar. Daha iyi anlamak için bu konuyla ilgili CPPCMS wiki'sini okumanızı tavsiye ederim. Tarihi gerçekler için, Amazon, Google, Facebook (bkz. Hip Hop ve son Alexandrescu röportajları) ve diğer bazı gerçekten büyük web hizmetleri, programcı verimliliğinde kaybedilen zamandan daha önemli olan açık hesaplama nedenleri için C ++ 'da çekirdeklere sahiptir.

CPPCMS ve cpp-netlib açık kaynak olarak, bir uygulamanın C ++ kullanarak bir web hizmeti olarak nasıl çalışacağını bilmek istiyorsanız bunları inceleyebilirsiniz. Bununla birlikte, bağlantı noktalarını dinleyebilen ve bağlantı noktasına veri gönderebilen herhangi bir uygulama bunu potansiyel olarak yapabilir, hepsi kodlarla değil protokollerle (TCP / IP, HTTP vb.) İlgilidir.


Henüz sessizce oy kullanılamıyor, ancak cevabınızı kabul ettim. CPPCMS gibi bir şeyin farkında değildim, ama bilmek güzel. Teşekkürler!
Manyak Bilim

1
Anlıyorum, diğerlerine göre oldukça yeni. Diğer kötü (kendi tavsiyemle) çözümler daha önce vardı ama bence bu dil ve soruna daha uygun.
Klaim

1
C ++ bu tür çerçevelere sahipti - web tamamen cgi uygulamalarıyla, MS'in ISAPI dll'leriyle ve hatta Microsoft'un ATLServer'ıyla çalıştırıldı. Günümüzde birkaç c ++ web çerçevemiz var ve Microsoft size Cas ++ hizmetlerini bulut hizmetleri olarak c ++ sağlayan çalışıyor.
gbjbaanb

Çoğu web uygulamasının bir ön uç sunucunun arkasında yaşadığı ve onunla verileri ortamdan geçiren CGI, stdin ve stdout veya HTTP'den biraz daha basit bir protokol kullanan FCGI veya FCGI ile konuşulduğu belirtilmelidir.
Jan Hudec

3

Diğer diller gibi ....

Bir TCP soketi açın, http mesajları gönderin ve alın. Onları ayrıştırın ve içeriğe dayalı şeyler yapın.

Bazı temel http işlevlerini destekleyen bir c ++ çerçevesinde bir örnek için Qt'ye bakın.

C ++ için özel web çerçeveleri de vardır. Çok fazla veya yaygın olarak kullanılmayan AFAIK. Muhtemelen C ++ ile web yaparsanız, yine de çok özel bir şey yapıyorsunuz ve her şey üzerinde tam kontrol istiyorsunuz.


Muhtemelen bunu kendim anlayabilmiş olmalıydım. Yaptığım tek web programlama Django'dan geçti, bu yüzden hepsi soyutlandı.
Manyak Bilimi

Bunu anladım. Django güzel, ama içine kazarsanız çekirdek kısmın çok zor olmadığını görürsünüz. Şimdi, C ++ ile bir Django eşdeğeri yazmak, eğlenceli bir zorluk var. ;)
Macke

@Macke Sanırım CPPCMS eğlenceli bir meydan okuma, ama emin değilim. C ++ 'da standart ağ oluşturma eksikliği yardımcı olmaz, ancak bununla çalışmak için tonlarca çözüm vardır. C ++ ile ana sorun sanırım daha yürütülebilir dosyayı yeniden başlatmadan güncelleme yapmak zor, ve bazen de derlemek çok uzun. CPPCMS buna yardımcı olur.
Klaim

Btw, modern, iyi bir async ağ c ++ kütüphanesi için mükemmel Boost paketinin bir parçası olarak sunulan ASIO kütüphanesini tavsiye ederim. İçinde bazı basit TCP / UDP istemci / sunucu uygulamaları yazdım ve oldukça güzel.
Macke

2

Bir istemci bakış açısından, bir C / C ++ programınız varsa ve bunu internet ile konuşmak için kullanmak istiyorsanız libcurl kullanırsınız. Veri göndermek ve almak için http URL'lerine bağlanmak için hemen hemen standart (ve kapsamlı) bir kitaplıktır. Başka birkaç kütüphane var - Microsoft'un birkaç tane var, birkaç açık kaynak kütüphanesi var.

Şimdi bu, http (veya SMTP veya FTP veya Gopher veya .. libcurl üzerinden düz eski URL'ler için! Libcurl çok kapsamlı!) SOAP üzerinden web hizmetlerini kullanmaya çalışıyorsanız, gSOAP.

Sunucu tarafı için, C ++ kodunuzu gösteren bir web sunucusuna veya çerçeveye ihtiyacınız vardır. Yine bunu yapmanın birçok yolu var - en eski web programlarının tümü C / C ++ idi, web sunucusunun uygulamanızı bir IPC formu kullanarak çağırdığı CGI programları olarak yazılmıştır. O zamandan beri, Wt, Qt, cppCMS, ffead ve Microsoft'tan (ISAPI, ATLServer ve şimdi Casablanca) hepsine sahibiz.

Bence hiç kimsenin web programlaması için C ++ 'ı gerçekten kullanmasının nedeni diğer diller bu kütüphanelerle önceden paketlenmiş olarak geliyor. C ++ (her zaman olduğu gibi) kullanmak için bir kütüphane bulmak zorundayken, PHP sadece web için gitmek için hazır geliyor.


-4

İstemci-sunucu mimarisi bunun olmasını sağlar.

Sunucuyu geliştirmek için C ++ kullanılabilir.

İstemci tarafında, sunucu ile iletişim kurmak için web teknolojileri kullanılabilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.