zoukankan      html  css  js  c++  java
  • node websocket学习研究

    websocket作为不同于http的数据传输方式,是开发一些实时系统的不二选择。

    最近在研究开发websocket方面的小程序。小程序客户端直接对websocket做了封装。自己只要写后端就可以了。我拿来测试的后端代码如下,本地环境下小程序可以成功运行。

    let websocket = require("websocket");
    let http = require("http");
    const WebSocketServer = websocket.server;
    
    // 创建一个http Server
    let httpServer = http.createServer((request, response) => {
        console.log("received a request");
        response.writeHead(404);
        response.end();
    });
    
    // 创建一个websocket Server,websocket Server需要建立在http server之上
    let wsServer = new WebSocketServer({
        httpServer: httpServer,
        autoAcceptConnections: true
    });
    
    /**
     * 广播所有客户端消息
     * @param  {String} type     广播方式(admin为系统消息,user为用户消息)
     * @param  {String} message  消息
     * @param  {String} nickname 用户昵称,广播方式为admin时可以不存在
     */
    function broadcastSend(type, message, nickname) {
        clients.forEach(function(v, i) {
            if (v.ws.readyState === ws.OPEN) {
                v.ws.send(JSON.stringify({
                    "type": type,
                    "nickname": nickname,
                    "message": message
                }));
            }
        })
    }
    // 事件监听
    wsServer.on("connect", (connection) => {
        let clients = [];
        clients.push({
            ws: connection,
            name: 1
        })
        console.log(">>>come from: " + connection.remoteAddress); // 显示连接客户端的ip地址
        connection.on("message", (message) => {
            console.log(message.type);
            console.log(">>>message: ", message); // 接收到信息的类型和内容,注意都是utf8编码
            connection.sendUTF(message.utf8Data + '我是websocket'); // 把接收到的信息发回去
    
    
                clients.forEach((v, i) => {
                    if (v.ws.readyState === connection.OPEN) {
                        v.ws.send(JSON.stringify({
                            "type": 1,
                            "nickname": 2,
                            "message": 3
                        }));
                    }
                })
    
            
        });
    
        connection.on("close", (reasonCode, description) => {
            console.log(connection.remoteAddress + " has disconnected.");
        });
    });
    
    // 启动服务器
    httpServer.listen(8082, () => {
        console.log(">>>Http Server is listening on port 8082!");
    });
    

      

  • 相关阅读:
    初级模拟玩骰子猜大小游戏
    会员号的百位数字等于产生的随机数即为幸运会员
    课外作业1:将一个double类型的小数,按照四舍五入保留两位小数
    git idea tag push
    java进程资源监控
    websocket
    kafka win10搭建 单机版
    kafka细节知识---mark
    Springboot 1.5.7整合Kafka-client
    redis安装 centos
  • 原文地址:https://www.cnblogs.com/zhensg123/p/10423760.html
Copyright © 2011-2022 走看看