nodejs之socket.io編程


socket
  網絡上的程序實現雙向的數據鏈接,這個鏈接的一端成為socket。
     
     1.Socket是一個持久鏈接。
 
     2.Socket是雙向通信的。
    
Socket VS ajax輪詢
    
    ajax輪詢 , 是利用客戶端來發送請求,每隔幾秒發送一個http請求,服務器壓力大。
 
    Socket不會,一旦鏈接不會斷開,可以實現實時通信。 比如微信的朋友圈更新提示。即時聊天通訊。
2 服務端和web端

在服務端和客戶端進行數據交互時(emit ------> on ),為什么要給服務端on綁定一個事件(所有的數據最終都要發回給服務器)

  為什么 給瀏覽器on綁定一個事件(服務器可以統一的觸發所有的web端的事件)

index.html 代碼如下:

<style>
* { margin: 0; padding: 0; box-sizing: border-box; }
body { font: 13px Helvetica, Arial; }
form { background: #000; padding: 3px; position: fixed; bottom: 0; width: 100%; }
form input { border: 0; padding: 10px; width: 90%; margin-right: .5%; }
form button { width: 9%; background: rgb(130, 224, 255); border: none; padding: 10px; }
#messages { list-style-type: none; margin: 0; padding: 0; }
#messages li { padding: 5px 10px; }
#messages li:nth-child(odd) { background: #eee; }
</style>
</head>
<body>
<ul id="messages"></ul>
<form action="">
<input id="m" autocomplete="off" /><button>Send</button>
</form>
<script src="/socket.io/socket.io.js"></script>
<script src="https://code.jquery.com/jquery-1.11.1.js"></script>
<script>
$(function () {
var socket = io();
// on是事件的綁定 emit是事件的觸發
// 發送了數據#m =>input
$('form').submit(function(){
//觸發了chat message 事件
//發送了#m => input 里面的value值
socket.emit('chat message', $('#m').val());
$('#m').val('');
return false;
});
//在客戶端 捕獲chat message事件
socket.on('chat message', function(msg){
$('#messages').append($('<li>').text(msg));
});
});
</script>
 
 
server.js代碼如下:
//一個頁面入口(服務端
//var express = require('express')
//var app = express()
var app = require('express')()//鏈式語法
var http = require('http').Server(app)
var io = require('socket.io')(http);

//2。express 路由
app.get('/',(req, res)=>{
res.sendFile(__dirname+'/index.html')
})
// app.get('/list',(req, res)=>{
// res.send('<h1>hello world list !</h1>')
// })

io.on('connection', function(socket){
console.log('a user connected');
//socket = client
socket.on('disconnect', function(){
console.log('user disconnected');
});
//綁定了一個chat message事件 ,在前端觸發
socket.on('chat message', function(msg){
io.emit('chat message', msg);
});
});

//1.創建一個監聽端口,開啟服務器

http.listen(3000, ()=>{
console.log('listening 3000')
})


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM