websocket:用語服務器端主動向客戶端推送消息
本例基於koa框架編寫用例:服務器端需要安裝相關模塊 koa koa-socket co等
服務器端腳本:(需要安裝相關模塊 koa koa-socket co等) //服務端 const Koa = require( 'koa' ) const IO = require( 'koa-socket' ) const co = require( 'co' ) const app = new Koa() const io = new IO({ namespace:"mysocket", ioOptions:{ path:'/restapi/websocketstock' } }) const TIME = 3000; //定時向客戶端發送消息 let TimerId = null; io.use( co.wrap( function *( ctx, next ) { let start = new Date() yield next() console.log( `response time: ${ new Date() - start }ms` ) })) // io.use( ... ); io.on("connection",function(){ //連接成功 console.log("successfully connect to websocket"); }); //定時向客戶端推送消息 function sendToClient(){ TimerId = setInterval(function(){ io.broadcast('stockchallenge', {"userNum":parseInt(Math.random()*100)}); },TIME); } //監控客戶端發來的消息源 io.on('messageClient', ( ctx, data ) => { console.log("來自客戶端的消息"); console.log(data); }) io.attach( app ); sendToClient(); app.listen( 3004 ); console.log("app is listening at 3004");
客戶端腳本:在客戶端,websocket需要瀏覽器支持才能使用,不過有許多js腳本對瀏覽器做了兼容性封裝,本例以socket.io為例,
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <div>users count: <span id="count"></span></div> <script src="js/socket.io.js"></script> <script> var socket = io.connect( "http://機器名:3004/mysocket",{ path:"/restapi/websocketstock" }); socket.on("connect",function(){ console.log("連接成功"); }); var sessionId; //監控服務器端的消息 stockchallenge socket.on("stockchallenge", function (data) { console.log("來自服務器端的消息",data); document.getElementById("count").innerHTML = data.userNum; }); </script> </body> </html>