HTTP沒法輕鬆實現實時應用:javascript
可是,確實聊天室確實存在html
方法:java
WebSocket協議可以讓瀏覽器和服務器全雙工實時通訊,互相的,服務器也能主動通知客戶端npm
npm install socket.io
製做index.html頁面。頁面中必須引入 /socket.io/socket.io.js, 調用io函數,取得socket對象。瀏覽器
<script src="/socket.io/socket.io.js" type="text/javascript" charset="utf-8"></script> <script type="text/javascript"> var socket = io(); //socket 對象 </script>
服務器中:服務器
var io = require('sockte.io')(server); io.on('connection',function( socket ){ //socket 對象 socket.on('tiwen',function( msg ){ console.log('服務器接受到了請求'); //sockte.emit('huida','ok'); //單條返回 //廣播 , 就是給當前全部用戶的發送信息。 io.emit('huida','ok'); }); });
客戶端和服務器,都有socket對象。 兩個對象都具備emit,和on的時間。emit用於發送,on用戶接受。
發送的內容能夠是任何類型的值。socket
前臺頁面:函數
<body> <h1>index頁面</h1> 信息內容:<input type="text" name="" id="info" value="" /> 發送: <input type="button" name="" id="btn" value="發送" /> <script src="/socket.io/socket.io.js" type="text/javascript" charset="utf-8"></script> <script type="text/javascript"> var socket = io(); document.getElementById("btn").onclick = function ( ) { socket.emit('tiwen',document.getElementById("info").value); } socket.on('huida',function ( msg ) { console.log('回答:' + msg); }); </script> </body>
後臺:性能
var http = require('http'); var fs = require('fs'); var server = http.createServer(function ( req,res ) { if ( req.url == '/' ) { // 顯示首頁 fs.readFile('./index.html',function ( err,data ) { res.end(data); }); } }); // 建立io對象 var io = require('socket.io')(server); // 監聽鏈接事件 io.on('connection',function ( socket ) { console.log( '一個客戶端鏈接了' ); socket.on('tiwen',function ( msg ) { // console.log( '提問爲:' + msg ); // socket.emit('huida','好呀'); // 加上廣播 io.emit('huida',msg); }); }); server.listen(80);