nodejs 实现聊天室功能 socket

首先 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);
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容