websocket nodejs

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_31126175/article/details/79205769

实例1

客户端

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>WebSocket</title>
</head>
<body>
    <h1>echo text</h1>
    <input id="sendText" type="text">
    <button id="sendBtn">发送</button>
    <div id="resc"></div>

    <script type="text/javascript">
    var websocket = new WebSocket("ws://echo.websocket.org/")
        websocket.onopen = function () {
            console.log("websocket open");
            document.getElementById("resc").innerHTML = "连接"
        }
        websocket.onclose = function () {
            console.log("websocket close");
        }
        websocket.onmessage = function (e) {
            console.log(e.data);
            document.getElementById("resc").innerHTML = e.data
        }
        document.getElementById("sendBtn").onclick = function(){
            var text = document.getElementById("sendText").value;
            websocket.send(text);
        }
    </script>
</body>
</html> 

服务端是用的ws://echo.websocket.org/

实例2

建立本地的服务端,需要用到node.js,请自行安装
在你的工作目录下调出命令行,shift+右键,弹出命令行(或者cmd,切换到你的工作目录)
我们需要nodejs-websocket这个模块
1. 安装模块
npm install nodejs-websocket
2. 客户端代码(index.html文件)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>WebSocket</title>
</head>
<body>
    <h1>echo text</h1>
    <input id="sendText" type="text">
    <button id="sendBtn">发送</button>
    <div id="resc"></div>

    <script type="text/javascript">
        var websocket = new WebSocket("ws://localhost:8001/")
        websocket.onopen = function () {
            console.log("websocket open");
            document.getElementById("resc").innerHTML = "连接"
        }
        websocket.onclose = function () {
            console.log("websocket close");
        }
        websocket.onmessage = function (e) {
            console.log(e.data);
            document.getElementById("resc").innerHTML = e.data
        }
        document.getElementById("sendBtn").onclick = function(){
            var text = document.getElementById("sendText").value;
            websocket.send(text);
        }
    </script>
</body>
</html>

3.服务端代码 (webserver.js文件)

var ws = require("nodejs-websocket")

// Scream server example: "hi" -> "HI!!!" 
var server = ws.createServer(function (conn) {
    console.log("New connection")
    conn.on("text", function (str) {
        console.log("Received "+str)
        conn.sendText(str.toUpperCase()+"!!!")
    })
    conn.on("close", function (code, reason) {
        console.log("Connection closed")
    })
}).listen(8001)

4.在工作目录下调出命令行[shift+右键,弹出命令行(或者cmd,切换到你的工作目录)]
启动服务 npm webserver.js
刷新网页进行测试

实例3 聊天功能

客户端代码(index.html)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>WebSocket</title>
</head>
<body>
    <h1>echo text</h1>
    <input id="sendText" type="text">
    <button id="sendBtn">发送</button>
    <div id="resc"></div>

    <script type="text/javascript">
        var websocket = new WebSocket("ws://localhost:8001/");
        function showMessage(str,type) {
            var div = document.createElement("div");
            if(type == "进入"){
                div.style.color = "blue";
            }else if(type == "离开"){
                div.style.color = "red"
            }else{
                div.style.color = "pink"
            }
            div.innerHTML = str;
            document.body.appendChild(div);
        }

        websocket.onopen = function () {
            console.log("websocket open");
            document.getElementById("sendBtn").onclick = function(){
            var text = document.getElementById("sendText").value;
                if(text){
                    websocket.send(text);
                }
            }
        }
        websocket.onclose = function () {
            console.log("websocket close");
        }
        websocket.onmessage = function (e) {
            console.log(e.data);
            var msg = JSON.parse(e.data)
            showMessage(msg.data,msg.type);
        }

    </script>
</body>
</html>

服务端代码(webserver.js)

var ws = require("nodejs-websocket")

var PORT = 8001;
var clientCount =0
// Scream server example: "hi" -> "HI!!!" 
var server = ws.createServer(function (conn) {
    console.log("New connection")
    clientCount++
    conn.nickname = "user" + clientCount;
    var msg={};
    msg.type = "进入";
    msg.data = conn.nickname +"进入"
    boradcast(JSON.stringify(msg))
    conn.on("text", function (str) {
        console.log("Received "+str)
        var msg={};
        msg.type = "message";
        msg.data = conn.nickname + ": " +str;
        boradcast(JSON.stringify(msg))
    })
    conn.on("close", function (code, reason) {
        console.log("Connection closed")
        var msg={};
        msg.type = "离开";
        msg.data = conn.nickname +"离开";
        boradcast(JSON.stringify(msg))
    })
    conn.on("error", function (err) {
        console.log("handle error")
        console.log(err)
    })
}).listen(PORT)

function boradcast(str) {
    server.connections.forEach(function(connection){
        connection.sendText(str);
    })
}

运行 node webserver.js
效果图
运行效果图

实例4

socket.io网站
socket.io文档

1.安装socket.io
npm install socket.io
2.客户端引入
下载下来,在本地使
https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.0.3/socket.io.js
3.客户端代码(index.html)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>WebSocket</title>
</head>
<body>
    <h1>echo text</h1>
    <input id="sendText" type="text">
    <button id="sendBtn">发送</button>
    <div id="resc"></div>

    <script src="socket.io-2.0.4.js" type="text/javascript"></script>
    <script type="text/javascript">
        var socket = io("ws://localhost:8001/");
        function showMessage(str,type) {
            var div = document.createElement("div");
            if(type == "enter"){
                div.style.color = "blue";
            }else if(type == "disconnect"){
                div.style.color = "red"
            }else{
                div.style.color = "pink"
            }
            div.innerHTML = str
            document.body.appendChild(div);
        }


        console.log("websocket open");
        document.getElementById("sendBtn").onclick = function(){
        var text = document.getElementById("sendText").value;
            if(text){
                socket.emit('message',text);
            }
        }

        socket.on("enter",function(data){
            showMessage(data,"enter")
        })
        socket.on("disconnect",function(data){
            showMessage(data,"disconnect")
        })
        socket.on("message",function(data){
            showMessage(data,"message")
        })

    </script>
</body>
</html>

4.服务端代码(webserver.js)


var app = require('http').createServer()
var io = require('socket.io')(app);


app.listen(8001);
var clientCount = 0;
io.on('connection', function (socket) {
    clientCount++
    socket.nickname = "user" + clientCount;
    io.emit("enter",socket.nickname+"进入")

    socket.on("message",function (str) {
        io.emit("message",socket.nickname+": "+ str)
    })
    socket.on("disconnect",function() {
        io.emit("disconnect",socket.nickname+"离开")
    })
});

猜你喜欢

转载自blog.csdn.net/qq_31126175/article/details/79205769