Un peu sur les vélos

Une fois que nous nous sommes installés avec un camarade de classe en 2014 pour couper une startup. Le terme, le résultat et l'objectif du produit ne sont pas importants pour ce texte. L'important est que le client était une application Java mobile pour Android et que le serveur était un service écrit en C # qui parlait au magasin de données. De plus - une mise en garde pour les aînés aux cheveux gris (de la programmation) pour le divertissement, pour les jeunes imberbes - pour l'édification.



Afin de m'assurer qu'en tant que développeur côté serveur, tout est sous contrôle, la première version du serveur a été écrite à l'aide de la classe System.Net.Sockets.Socket, comme le décrit l' article de Microsoft. Étant donné que les sockets fonctionnent (en principe, comme toutes les autres technologies répertoriées plus loin de Microsoft, à l'exception de WCF) sur les méthodes Begin / End, un petit wrapper a été écrit pour permettre de travailler avec le modèle événementiel. C'était la première étape, le client et le serveur fonctionnaient bien.



Comme très vite nous avions besoin de SSL, nous avons dû passer à un niveau supérieur du modèle OSI et réécrire le côté serveur en utilisant la classe System.Net.Sockets.TcpListener, à laquelle SSL était vissé. C'étaient les étapes deux et deux et demie, le client et le serveur fonctionnaient bien, le client n'avait même pas besoin d'être réécrit - l'interception de paquets montrait que tout allait bien, rien n'avait changé.



Plus tard, je voulais un HTTPS à part entière avec toutes ses cloches et sifflets, pour lequel le serveur a été réécrit à nouveau - en utilisant maintenant la classe System.Net.HttpListener. Ce sont les étapes trois et trois et demie, et encore une fois, tout fonctionne bien, et encore une fois, le client n'a pas besoin d'être refait. Par souci d'équité, il convient de noter qu'en plus du client mobile personnalisé, il y avait aussi un client de test C # et un tas de tests - mais ils ont dû être réécrits à un coût.



La quatrième étape est venue lorsque nous avons commencé à faire évoluer notre système dans toutes les directions, et nos propres emballages sont devenus le goulot d'étranglement du projet. Puis j'ai lu sur WCF et en une soirée (enfin presque) j'ai réécrit toute l'interaction. Côté client (et dans les paquets en cours de transfert), tout reste le même, mais le code côté serveur est passé d'une demi-douzaine de classes sérieuses à quelques lignes.



Cette histoire a deux morales.



  1. (évidemment) Inventer des vélos est mauvais. Si j'allais immédiatement chez Google et que je n'avais pas peur d'utiliser une nouvelle technologie pour moi-même, je serais en mesure de réduire le développement de serveurs d'environ un tiers.
  2. (et c'est l'essentiel) La tâche d'implémenter le même mécanisme à l'aide de différents outils est la meilleure façon d'apprendre, vous permettant d'acquérir la compréhension la plus profonde du sujet. Lorsque vous faites quelque chose quelques fois, vous vous en souvenez. Mais quand en même temps vous compliquez (changez) les outils utilisés à chaque fois, alors la compétence est beaucoup mieux affûtée.



All Articles