首先 npm install socket.io
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<h1>实时通讯</h1>
<textarea cols="50" id="content" rows="10"></textarea>
<br>
<input type="text" id="msg" >
<input type="submit" value="提交" id="btn">
<script type="text/javascript" src="/socket.io/socket.io.js"></script>
<script type="text/javascript">
var socket = io("http://localhost:3000");
var btn = document.getElementById("btn");
var msg = document.getElementById("msg");
var content = document.getElementById("content");
var user = "tempUser"+ Math.floor(Math.random()*1000);
btn.onclick = ()=>{
var str = msg.value;
socket.emit("sendMsg",user +":"+str);
}
socket.on("myNews",(msg)=>{
console.log("msg",msg);
content.value += msg +"\n";
})
</script>
</body>
</html>
var http = require("http");
var fs = require("fs");
var io = require("socket.io");
var server = http.createServer((req,res)=>{
if(req.url=="/"){
fs.readFile("index.html",(err,data)=>{
res.end(data);
})
}else {
res.end("no page found");
}
})
server.listen(3000);
var ioClass = require("socket.io");
var ioInstanct = ioClass(server);
ioInstanct.on("connection",(socket)=>{
socket.on("sendMsg",(data)=>{
console.log("dada:",data);
ioInstanct.emit("myNews","服务器转发:"+data);
});
})
Node02-socket 流服务器
websocket协议:(全双工通信)
服务器和浏览器都会发送信息
服务器和浏览器都可以相互同时发生信息
网页聊天 游戏服务器
下载socket.io
服务器端
// 引入socket.io模块
var io = require('socket.io')(server);
// 先做连接(connection)
// socket:就是当前的socket:IP地址和端口
io.on('connection', function(socket) {
socket.on('sendMsg', function(data) {
console.log(data);
// 服务器端手动触发客户端的news事件
io.emit('news', data);
});
})
客户端
// 引入socket.io-client的js文件(在node_modules文件中)
// 跟服务器进行通讯
// 和服务器的端口号保持一致
var socket = io('http://localhost:3000');
// 触发服务器端的sendMsg事件
socket.emit('sendMsg', str);
// 客户端绑定news事件
socket.on('news', function(msg) {
// 接收到服务器的消息,并写入到textarea文本域中
content.value += msg + "\n";
})
socket案例
http://www.cnblogs.com/wishyouhappy/p/3734269.html
百度搜索: socket 生成用户名
## SSE:
服务器主动推送事件 server-sent event(服务器单方面主动推送消息)
## 推送邮件,微博好友消息互动 电商发货提醒等
### 服务器端
// 读取文件数据
fs.readFile('aaa.html', function(err, data) {
var str = data.toString();
// 写入头信息为text/event-stream
res.writeHead(200, { 'Content-type': 'text/event-stream' });
// 结束响应的格式必须是此格式
res.end("data:" + str + "\n\n");
})
// 服务器主动推送事件Server-sent Events(SSE)
var source = new EventSource("http://localhost:3000/aaa");
source.onmessage = function(event) {
console.log(event);
}