nodejs即時聊天

來源:互聯網
上載者:User

標籤:article   date   gets   osi   deb   expr   UI   padding   tracking   

一直想做一個即時聊天的應用,前幾天看到了socket.io,感覺還不錯。自己略加改動,感覺挺不錯的。官網上給的範例非常easy,以下改進了一點,實現了曆史訊息的推送。

demo地址:chat.codeboy.me


當中server端代碼:

var app = require(‘express‘)();var http = require(‘http‘).Server(app);var io = require(‘socket.io‘)(http);var history = new Array();app.get(‘/‘, function(req, res){  res.sendfile(‘chat.html‘);});io.on(‘connection‘, function(socket){  socket.on(‘chat message‘, function(msg){    io.emit(‘chat message‘, msg);    addMsg(msg);  });  socket.on(‘login message‘, function(msg){    socket.join(‘history room‘);    for(var i=0;i<history.length;i++){      io.in(‘history room‘).emit(‘chat message‘, history[i]);   }      io.in(‘history room‘).emit(‘chat message‘, ‘lyd__上面是近期的一些資訊‘);    socket.leave(‘history room‘);    socket.join(‘chat room‘);      io.emit(‘chat message‘,msg);    addMsg(msg);  });});http.listen(3000, function(){  console.log(‘listening on *:3000‘);});function addMsg(msg){ history.push(msg); if(history.length>100)    history.shift();};


聊天頁面代碼:

<!doctype html><html>  <head>    <title>聊天室</title>    <style>      * { margin: 0; padding: 0; box-sizing: border-box; }      body { font: 20px Helvetica, Arial; }      form { background: #000; padding: 3px; position: fixed; bottom: 0; width: 100%; }      form input { border: 0; padding: 10px; width: 90%;  }      form button { width: 10%; background: rgb(130, 224, 255); border: none;  padding: 10px; }      #messages { list-style-type: none; margin: 0; padding: 0; }      #messages li { padding: 5px 10px 5px 10px; }    </style>  </head>  <body>    <ul id="messages"></ul>    <form action="">      <input id="m" autocomplete="off" /><button id="btn">登入</button>    </form>    <script src="/socket.io/socket.io.js"></script>    <script src="http://code.jquery.com/jquery-1.11.1.js"></script>    <script>      var socket = io();      var login  =true;      var username = "" ;       var myDate = new Date();      $(‘form‘).submit(function(){         if(login){           username = $(‘#m‘).val();           if(username.length==0){               alert("請輸入使用者名稱");               return false;            }           login = false ;           socket.emit(‘login message‘, "lyd__<font color=blue>"+username + ‘</font>增加了聊天室   ‘+myDate.getMonth()+"-"+myDate.getDate()+" "+myDate.getHours()+":"+myDate.getMinutes()+":"+myDate.getSeconds());           $(‘#btn‘).html("發送");         }else {            socket.emit(‘chat message‘, username +"##"+ $(‘#m‘).val());        }         $(‘#m‘).val(‘‘);        return false;      });        socket.on(‘chat message‘, function(msg){        var item = msg.split("##",2);        if(msg.indexOf(‘lyd__‘)==0)          $(‘#messages‘).append(‘<li style="text-align:center; font-size:12px;margin-top:1px; color:red; background-color:#eee;">‘ +msg.substr(5)+‘</li>‘);        else if(msg.indexOf(username)==0){          $(‘#messages‘).append(‘<li style="text-align:right; font-size:12px; color:red;">‘+item[0]+‘:</li>‘);          $(‘#messages‘).append(‘<li style="text-align:right;padding-top:0px; padding-left:30%;color:purple;">‘+item[1]+‘</li>‘);        }else {          $(‘#messages‘).append(‘<li style="text-align:left;font-size:12px; color:red;">‘+item[0]+‘:</li>‘);          $(‘#messages‘).append(‘<li style="text-align:left;padding-top:0px; padding-right:30%; color:purple;">‘+item[1]+‘</li>‘);        }      });    </script>  </body></html>

這樣就實現了一個聊天室,進入後輸入username,登入,之後server返回近期的100條訊息。

nodejs即時聊天

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.