<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Sairaj Sawant</title>
    <description>The latest articles on DEV Community by Sairaj Sawant (@sairajsawant).</description>
    <link>https://dev.to/sairajsawant</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F250796%2F4a8471d2-a48d-4eca-937c-5547acd37810.png</url>
      <title>DEV Community: Sairaj Sawant</title>
      <link>https://dev.to/sairajsawant</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/sairajsawant"/>
    <language>en</language>
    <item>
      <title>Building a Real-time Comment System in MERN using WebSockets</title>
      <dc:creator>Sairaj Sawant</dc:creator>
      <pubDate>Mon, 04 Nov 2019 06:16:48 +0000</pubDate>
      <link>https://dev.to/sairajsawant/building-a-real-time-comment-system-in-mern-using-websockets-2b9d</link>
      <guid>https://dev.to/sairajsawant/building-a-real-time-comment-system-in-mern-using-websockets-2b9d</guid>
      <description>&lt;p&gt;Greetings, DEV Community! Excited to write my first DEV Post about how I built a Real-time Comment System! So, I was asked to code a simple commenting system in MERN as part of a take-home assignment for a start-up's hiring process. The major requirment was to have support for 👍 &amp;amp; 👎.&lt;/p&gt;

&lt;p&gt;I had actively started using Twitter and was amazed by its feature of real-time updation of retweet &amp;amp; ♥️ count. How does twitter do that? After reading &lt;a href="https://stackoverflow.com/a/12855533/6763544"&gt;this&lt;/a&gt; amazing answer on SO, I thought &lt;em&gt;Why not try implementing real-time comments &amp;amp; 👍👎 using WebSockets?&lt;/em&gt; I would completely agree with implementing Long Polling would have made more sense, and that's what &lt;a href="https://socket.io/docs/server-api/#new-Server-httpServer-options"&gt;Socket.IO&lt;/a&gt; library will prefer doing, but then decided to learn more about WebSockets and implement the same.&lt;/p&gt;

&lt;p&gt;So, did it turn out to be good? &lt;strong&gt;&lt;em&gt;You decide!&lt;/em&gt;&lt;/strong&gt; Watch the video demo I made after completing the assignment.&lt;br&gt;
&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/8bGpU7fMBU0"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Interested in having a look at the code? Cool! Head over to my Github Repo and check it out!&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--566lAguM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/sairajsawant"&gt;
        sairajsawant
      &lt;/a&gt; / &lt;a href="https://github.com/sairajsawant/comment-system"&gt;
        comment-system
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Realtime Commenting System
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;h2&gt;
Realtime Commenting System&lt;/h2&gt;
&lt;h4&gt;
Single Page Application (SPA) to demonstrate real-time comments using MERN Stack.&lt;/h4&gt;
&lt;h2&gt;
Video Walkthrough of Realtime Commenting System&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://youtu.be/8bGpU7fMBU0" rel="nofollow"&gt;https://youtu.be/8bGpU7fMBU0&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;
Installation&lt;/h2&gt;
&lt;div class="highlight highlight-source-shell position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;&lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; Clone this repository&lt;/span&gt;
git clone https://github.com/sairajsawant/comment-system.git

&lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; Fire up MongoDB container&lt;/span&gt;
docker run -d -p 27017:27017 --restart unless-stopped --name commentsmongo mongo

&lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; Fire up Redis container&lt;/span&gt;
docker run -d -p 6379:6379 --restart unless-stopped --name commentsredis redis

&lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; Go into the backend directory&lt;/span&gt;
&lt;span class="pl-c1"&gt;cd&lt;/span&gt; comment-system/backend

&lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; Install dependencies&lt;/span&gt;
npm install

&lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; Start the server&lt;/span&gt;
npm start

&lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; Go into main app directory&lt;/span&gt;
&lt;span class="pl-c1"&gt;cd&lt;/span&gt; ..

&lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; Install dependencies&lt;/span&gt;
npm install

&lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; Start the App&lt;/span&gt;
npm start
&lt;/pre&gt;

&lt;/div&gt;
&lt;h2&gt;
Features&lt;/h2&gt;
&lt;ul class="contains-task-list"&gt;
&lt;li class="task-list-item"&gt;
&lt;p&gt; Realtime comments &amp;amp; upvotes/downvotes using &lt;strong&gt;WebSockets&lt;/strong&gt; &amp;amp; &lt;strong&gt;Redis&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li class="task-list-item"&gt;
&lt;p&gt; &lt;strong&gt;JWT&lt;/strong&gt; based authorization&lt;/p&gt;
&lt;/li&gt;
&lt;li class="task-list-item"&gt;
&lt;p&gt; Microservice architecture using &lt;strong&gt;Node.js&lt;/strong&gt; &amp;amp; &lt;strong&gt;Express&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li class="task-list-item"&gt;
&lt;p&gt; Caching in &lt;strong&gt;Redis&lt;/strong&gt; &amp;amp; Persistent Storage in &lt;strong&gt;MongoDB&lt;/strong&gt; using &lt;strong&gt;Mongoose ODM&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li class="task-list-item"&gt;
&lt;p&gt; Container based development using &lt;strong&gt;Docker&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
Technology Stack&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Node.js&lt;/li&gt;
&lt;li&gt;React&lt;/li&gt;
&lt;li&gt;MongoDB&lt;/li&gt;
&lt;li&gt;Redis&lt;/li&gt;
&lt;li&gt;WebSockets&lt;/li&gt;
&lt;li&gt;JWT&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;



&lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/sairajsawant/comment-system"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;p&gt;Do tap the ♥️ to encourage &amp;amp; comment on any improvements, preferably in real-time😉! &lt;/p&gt;

</description>
      <category>webdev</category>
      <category>mongodb</category>
      <category>react</category>
      <category>node</category>
    </item>
  </channel>
</rss>
