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);