ノードを使用してWebチャットアプリケーションをビルドします.JSソケット.io


注目📝

  • この記事は既にノードがあると仮定します.あなたのコンピュータにインストールされたJS.あなたがそうしないならば、親切にそうしてくださいhere
  • 始めましょう!


    この書き込みは非常にシンプルな2層のチャットアプリケーションを構築するプロセスを歩くことを期待.

    バックエンドを構築することから始めましょう
  • フォルダを作成し、何でも好きな名前を付けますSOCKET-APPLICATION-SERVER .
  • 今すぐあなたの選択の任意のIDEを使用してフォルダを開くことができます.私はvscodeを好む.
  • このフォルダの端末を開き、ノードプロジェクトを起動しますnpm init . このコマンドは、名前、バージョン、説明などのアプリケーションのすべての主要な詳細をpackage.json ファイル.

  • 今すぐあなたのエントリポイントファイルを作成し、お好みの名前を与える.私の名前app.js .
  • ダウンロードsocket.io 走らせるnpm install socket.io 端末で.
  • サーバーの設定app.js 以下のコードを持つファイル.
  • const httpServer = require('http').createServer((req, res) => {
        res.setHeader('Access-Control-Allow-Origin', `${front end server link}`);
        res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE');
        res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type');
        res.setHeader('Access-Control-Allow-Credentials', true);
      });
    
  • 現在、socket.io パッケージを作成し、オブジェクトを作成します.
  •  const io = require('socket.io')(httpServer, {
        cors: {
          origin: `${front end server link}`,
          methods: ["GET", "POST"],
          credentials: true
        }
      });
    
  • 接続を開始するために、以前に作成されたソケットオブジェクトを使用します.
  • io.on('connection', socket => {
    
      });
    
  • 現在、フロントエンドからユーザの名前エントリを受け取ります(フロントエンドの構築を開始すると、これはより多くの意味を持ちます).
  • io.on('connection', socket => {
    
    //new code added
       socket.on('username', username => {
          users[socket.id] = username
          socket.broadcast.emit('user-in', username)
        })
    //new code added
    
      });
    
  • 私たちは今どのように接続した後、ユーザーの名前は、我々は今、ユーザーの(送信者)メッセージを心配することができます.我々は、他の誰かにオンラインでユーザーの(発信者)メッセージを放送するつもりです.我々は最初にこのタグを付けたメッセージを受信することによってこれを行いますsend-chat-message それから、それを出すchat-message タグ.このメッセージは、入ってきたメッセージと出てくるメッセージを区別するのに役立つ.
  • io.on('connection', socket => {
    
       socket.on('username', username => {
          users[socket.id] = username
          socket.broadcast.emit('user-in', username)
        })
    
    //new code added
      socket.on('send-chat-message', msg => {
            socket.broadcast.emit('chat-message', {message: msg, 
      name: users[socket.id]})
        })
    //new code added
    
      });
    
  • 送付者が切断するか、その逆であるならば、我々はレシーバーに通知したいです.
  •   const users = {}
    io.on('connection', socket => {
    
       socket.on('username', username => {
          users[socket.id] = username
          socket.broadcast.emit('user-in', username)
        })
    
     socket.on('send-chat-message', msg => {
            socket.broadcast.emit('chat-message', {message: msg, 
      name: users[socket.id]})
        })
    
    //new code added
     socket.on('disconnect', () => {
          socket.broadcast.emit('user-disconnected', users[socket.id])
          delete users[socket.id]
        })
    //new code added
    
      });
    
  • 最後にサーバのポートを設定し、リクエストを聞く
  •   const PORT = process.env.PORT || 3000;
      httpServer.listen(PORT, () => console.log(`Running server on 🚀. \nListening on ${ PORT } 👂`));
    
  • 実行してサーバーを起動するnode app.js 端末で.あなたはいつでも変更を行うサーバーを自動的にリフレッシュNodemonを使用することを検討することができます.
  • フロントエンドの構築を開始


    適切な理解を支援するために、フロントエンドは別のサーバーで実行されます.
  • フォルダを作成し、何でも好きな名前を付けますSOCKET-APPLICATION-CLIENT .
  • IDEでフォルダを開きます.
  • ランnpm init このフォルダの端末で
  • ダウンロードsocket.io 走らせるnpm install socket.io 端末で.
  • シンプルな作成index.html 次の本文をファイルします.
  • <body>
            <div id="message-container">
            </div>
    
                <div  id="send-container">
    
                    <input name=""  placeholder="Type your message..." type="text" id="message-input"> 
                    <button id="end-button"  type="submit">
                        <span  id="submits">
                            <i class="fas fa-location-arrow"></i>
                        </span>
                    </button> 
                </div>
    
        </body>
    
  • インデックス内に次のスクリプトリンクを追加します.HTML<head> タグ.The socket.io インスタンスはバックエンドから作成され、送られます.The script.js ファイルはメッセージを送受信するためにインスタンスを使用します.
  • <script defer src="http://localhost:3000/socket.io/socket.io.js"></script>
    <script defer src="./script.js"></script>
    
  • また、ダウンロードnodemon 走らせるnpm install nodemon 端末で.これは、変更を行うときにいつでもフロントエンドサーバーを再起動します.
  • エントリポイントファイルを作成します.app.js .
  • サーバーの設定app.js 最初にnpm install express . 私たちのようなサーバの静的ファイルを表現する必要がありますindex.html ページ.
  • 今すぐ記入app.js 以下のコードによるページ.
  • var express = require('express'), app = express() 
    app.use('/', express.static('public'));
    
    const PORT = process.env.PORT || 8000;
    app.listen(PORT, () => console.log(`Running server on 🚀. \nListening on ${ PORT } 👂`));
    
    
  • スクリプトを作成します.JSファイルにリンクindex.html もっと早く.ファイルでは、必要なすべてのDOM要素を取得します.
  • 
    const mesaageForm = document.getElementById("submits")
    const messageInput = document.getElementById('message-input')
    const messageContainer = document.getElementById('message-container')
    const userInfo = document.getElementById('user-info')
    
  • フロントエンドへの接続
  • // connect to the server socket
    const socket = io('http://localhost:3000', {
      withCredentials: true
    });
    
  • ソケットがメッセージを聞くことを許します.それが空でないならば、メッセージを受信者の見解に加えるだけです
  • //listen to the socket for content with the tag 'chat-message'
    socket.on('chat-message', data => {
        if (data.message != "") {
          appendMessage(`${data.name}: ${data.message}`)
    
        }
    })
    
  • 送付者が切断するか、逆であるなら、我々はレシーバーに通知したいので、我々は切断を聞くために、ソケットを使用します.
  • //listen to the socket for user disconnection
    socket.on('user-disconnected', name => {
      appendMessage(`${name}: disconnected`)
    })
    
  • 今我々のアプリケーションは、すべての必要な変更とメッセージを聞いている、我々はユーザーの名前を取得するに移動することができます
  • //ask the user for their name
    const username = prompt('What is your name ?😃')
    socket.emit('username', username)
    
  • 今、我々はスクリーンと受信機の両方に新しいメッセージを加える機能を書く必要があります.
  • // send message to reciever
    function appendMessage(message){
      let man = messageContainer.scrollHeight + 500;
      messageContainer.scroll = man
      var wrapper= document.createElement('div');
    wrapper.innerHTML = `
    
        <div>
          <p>${message}</p>
        </div>
                  `
          messageContainer.append(wrapper)
    }
    
    //show message on sender's screen
    function appendMessageForMe(message){
      messageContainer.scrollTop = messageContainer.scrollHeight;
    
      var wrapper= document.createElement('div');
    wrapper.innerHTML = `
      <div>
          <p>${message}</p>
        </div>
                  `
          messageContainer.append(wrapper)
    }
    
  • 最後に、イベントリスナーを使用して、ユーザーがメッセージを送信したいときに作成した関数をアクティブにします.簡単にするために、我々は、ユーザーがタップ/クリックボタンをクリックすると、メッセージを入力した後にEnterボタンを押すと、関数をアクティブにします.
  • 
    // if the user taps the send button or presses enter key, the message should be sent.
    mesaageForm.addEventListener('click', e =>{
        e.preventDefault()
        const message  = `${messageInput.value}`
        if (message != "") {
    
          // the emit method sends the message out with the tag: 'send-chat-message' 
          socket.emit('send-chat-message', message)
          appendMessageForMe(message)
          messageInput.value = ''
        }
    
    })
    messageInput.addEventListener('keydown', e =>{
      if (e.key === "Enter") {
        e.preventDefault()
        const message  = `${messageInput.value}`
        if (message != "") {
          socket.emit('send-chat-message', message)
          appendMessageForMe(message)
          messageInput.value = ''
        }
      }
    
    
    })
    
    
  • ランnodemon 端末ではhttp://localhost:8000/
  • バックエンドサーバを走らせるのを忘れないでください.
  • 結論

  • ソケットを使うバックエンドサーバを作りました.IO利用者へのメッセージの受信と再配布
  • また、非常にシンプルなビルド😅 フロントエンドはメッセージ交換を示す
  • あなたがこれを試みる後にあなたの強化を加えるのを忘れないでください.私は私の倉庫にこのアプリケーションの高度なバージョンがあります.バックエンドをチェックhere フロントエンドhere