zoukankan      html  css  js  c++  java
  • webScoket

    WebSocket 是一种网络通信协议。RFC6455 定义了它的通信标准。
    
    WebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议。
    创建简易的聊天室
    <!DOCTYPE html> 
    <html lang="en">
    <head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
      引入socket.io.js
    <script src="socket.io.js"></script> <style> body { font-size: 14px; } #content{ width:300px; height:200px; border:1px solid red; overflow: auto; } .left{ text-align: left; } .right{ text-align: right; } #content p{ border:1px solid green; border-radius:10%; } </style> </head> <body> <!-- 用户登录 --> <p> <input type="text" id="userName"> <button id="login">登录</button> </p> <!-- 聊天窗口 --> <div id="content"> </div> <!-- 发送按钮 --> <p> <input type="text" id="ipt"> <button id="send">发送 to who</button> </p> <button id="clos">断开连接</button> <!-- 上线用户列表 --> <ul id="list"></ul> </body> <script> var socket; var user = ''; var toWho = ''; login.onclick = function () { socket = io('http://localhost:3000'); socket.emit('login', {userName: userName.value}); user = userName.value; socket.on('userList', function (data) { console.log(data); var html = ''; for (x in data) { html += '<li>' + data[x] + '</li>'; } list.innerHTML = html; }); socket.on("send", function (data) { content.innerHTML += "<p class='left'>" + data.from + " : " + data.msg + "</p>" }); } send.onclick = function () { socket.emit('send', { to: toWho, from: user, msg: ipt.value }); content.innerHTML += "<p class='right'>我:" + ipt.value + "</p>"; } list.onclick = function (e) { if (e.target.nodeName == "LI") { toWho = e.target.innerHTML; } send.innerHTML = "发送 to " + toWho; } </script> </html>
    var http = require("http");
    var fs = require("fs");
    var io = require("socket.io");
    
    var app = http.createServer(function (req, res) {
        if (req.url == '/') {
            fs.readFile('index.html', function (err, data) {
                res.end(data);
            });
        } else if (req.url == '/socket.io.js') {
            fs.readFile("socket.io.js", function (err, data) {
                res.writeHead(200, {
                    "Content-type": "text/javascript"
                })
                res.end(data);
            });
        } else {
            res.end('');
        }
    }).listen(3000);
    console.log('server is success');
    
    
    
    
    
    var ws = io(app);
    var userObj = {};
    
    ws.on('connection', function (socket) {
        socket.on('login', function (data) {
            userObj[data.userName] = socket;
            var arr = [];
            for (var i in userObj) {
                arr.push(i);
            }
            ws.emit("userList", arr);
        });
    
    
        socket.on('send', function (data) {
            userObj[data.to].emit('send', data);
        });
    
    });
    
    
    
    
    
    // 全体广播,发送userList事件
    // ws.emit("userList",arr)
    // 全体广播除了自己
    // socket.broadcast.emit("userList",arr);
    // 只发给自己
    // socket.emit("userList",arr)
  • 相关阅读:
    卡巴斯基呼吁通过国际立法打击网络犯罪 狼人:
    服务流量论Google的那些服务
    字符数组hdu 4552
    方法说明JAVA复习笔记前言:第一节:从注释开始
    新特性版本Impala各版本新特性
    通知准时为什么讲座时间在通知中提前了半个小时
    集合objectjava_collection
    android对象巧用Android网络通信技术,在网络上直接传输对象
    ejb对象2013年 最新面试题
    提示系统启动关于误更改/var下诺干的权限问题,导致系统启动提示The System is running in lowgraphics mode问题解决 By ACReaper
  • 原文地址:https://www.cnblogs.com/bao2333/p/10142981.html
Copyright © 2011-2022 走看看