socket都有哪些属性可读?

本文介绍了一个使用 Socket.IO 构建的简单实时应用案例。详细展示了服务端与客户端的交互过程,包括连接建立、消息发送与接收等核心操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

属性小记

// 服务端

const express = require('express');
const app = express()
const server = require('http').createServer(app);
const io = require('socket.io')(server);


// app.use((req,res)=>{
//     res.json(22233)
// })
io.on('connection', (socket) => {
    // 服务端监听客户端发送的信息
    
    socket.on('message', (msg) => {
        console.log('收到一条信息');
        // 给除了自己所有在线的用户广播一条信息
        // socket.broadcast.emit("guagnbo", io.sockets)
        socket.emit("guagnbo", "ss")
        // 给所有在线的用户广播一条消息
        // io.sockets.emit("guagnbo","服务端提供的信息")

    })
})

server.listen(3000);
/**
    监听当前用户发送的消息和给当前用户触发事件监听
    on 和 emit;
    只有emit和send提供消息确认
 */

/*
    给除了自己以外的所有在线用户广播一条信息
    socket.broadcast.emit("guagnbo", "收到了,这是服务端的回信")

    给所有在线的用户包括自己(如果自己也在线)广播一条消息
    io.sockets.emit("guagnbo","服务端提供的信息")
*/

/**
 * 客户端离线状态发送的消息,当用户连线后全部都会触发服务器相应事件的监听。
 */

 /**
  * 还想知道socket的什么
  * 以上都只是服务端给当前客户端处理消息,并没有提到如何给指定客户端发送消息,也没有提到如何建立房间。
  */

复制代码
// 客户端

var btn = document.querySelector('button');
var socket = io("http://localhost:3000/abc");
socket.on('connect',(msg)=>{
    console.log("连接服务端成功")
    console.log(socket.id)
})
// 客户端主动发送信息到服务端
btn.onclick=function(e){
    socket.send("客户端发送信息")
}
// 客户端监听服务端的“guagnbo”事件
socket.on('guagnbo',(msg)=>{
    console.log(msg)
    // fn('客户端收到了')
})
复制代码

socket属性

socket.id

id: 'fJUlpXTrnkPg7VqAAAAA'
复制代码

socket.rooms

{}
复制代码

socket.acks

{}
复制代码

socket.connected

true
复制代码

socket.disconnected

false
复制代码

socket.fns

[]
复制代码

socket.flags

{}
复制代码

socket._rooms

[]
复制代码

socket.handshake

headers: {
    host: 'localhost:3000',
    connection: 'keep-alive',
    accept: '*/*',
    origin: 'null',
    'user-agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36',
    dnt: '1',
    'accept-encoding': 'gzip, deflate, br',
    'accept-language': 'zh,zh-CN;q=0.9,en;q=0.8',
    cookie: '_ga=GA1.1.303873506.1517909567; Hm_lvt_b46541a9e9801d293566f07893cba904=1522150030,1522204209; user=%E9%92%9F%E5%AE%B6%E9%93%AD; io=eeluXKCWzmnFdlO3AAAA'
},
time: 'Sun May 13 2018 20:39:03 GMT+0800 (中国标准时间)',
address: '::1',
xdomain: true,
secure: false,
issued: 1526215143616,
url: '/socket.io/?EIO=3&transport=polling&t=MDPWl2g',
query: { EIO: '3', transport: 'polling', t: 'MDPWl2g' }
复制代码

socket.adapter

{
    nsp: {
        name: '/',
        server: {
            nsps: [Object],
            parentNsps: Map { },
            _path: '/socket.io',
            _serveClient: true,
            parser: [Object],
            encoder: Encoder { },
            _adapter: [Function: Adapter],
            _origins: '*:*',
            sockets: [Circular],
            eio: [Object],
            httpServer: [Object],
            engine: [Object] 
        },
        sockets: { '2pDLiPOMk-Fr3TThAAAA': [Object] },
        connected: { '2pDLiPOMk-Fr3TThAAAA': [Object] },
        fns: [],
        ids: 0,
        rooms: [],
        flags: { },
        adapter: [Circular],
        _events: { connection: [Function] },
        _eventsCount: 1 
    },
    rooms:{ '2pDLiPOMk-Fr3TThAAAA': Room { sockets: [Object], length: 1 } },
    sids: { '2pDLiPOMk-Fr3TThAAAA': { '2pDLiPOMk-Fr3TThAAAA': true } },
    encoder: Encoder { } 
}
复制代码

socket.nsp

{
    name: '/',
    server: {
        nsps: {
            '/': [Circular]
        },
        parentNsps: {},
        _path: '/socket.io',
        _serveClient: true,
        parser: {
            protocol: 4,
            types: [Array],
            CONNECT: 0,
            DISCONNECT: 1,
            EVENT: 2,
            ACK: 3,
            ERROR: 4,
            BINARY_EVENT: 5,
            BINARY_ACK: 6,
            Encoder: [Function: Encoder],
            Decoder: [Function: Decoder]
        },
        encoder: {},
        _adapter: [Function: Adapter],
        _origins: '*:*',
        sockets: [Circular],
        eio: {
            clients: [Object],
            clientsCount: 1,
            wsEngine: 'ws',
            pingTimeout: 5000,
            pingInterval: 25000,
            upgradeTimeout: 10000,
            maxHttpBufferSize: 100000000,
            transports: [Array],
            allowUpgrades: true,
            allowRequest: [Function: bound],
            cookie: 'io',
            cookiePath: '/',
            cookieHttpOnly: true,
            perMessageDeflate: [Object],
            httpCompression: [Object],
            initialPacket: [Array],
            ws: [Object],
            _events: [Object],
            _eventsCount: 1
        },
        engine: {
            clients: [Object],
            clientsCount: 1,
            wsEngine: 'ws',
            pingTimeout: 5000,
            pingInterval: 25000,
            upgradeTimeout: 10000,
            maxHttpBufferSize: 100000000,
            transports: [Array],
            allowUpgrades: true,
            allowRequest: [Function: bound],
            cookie: 'io',
            cookiePath: '/',
            cookieHttpOnly: true,
            perMessageDeflate: [Object],
            httpCompression: [Object],
            initialPacket: [Array],
            ws: [Object],
            _events: [Object],
            _eventsCount: 1
        },
        httpServer: {
            domain: null,
            _events: [Object],
            _eventsCount: 5,
            _maxListeners: undefined,
            _connections: 1,
            _handle: [Object],
            _usingSlaves: false,
            _slaves: [],
            _unref: false,
            allowHalfOpen: true,
            pauseOnConnect: false,
            httpAllowHalfOpen: false,
            timeout: 120000,
            keepAliveTimeout: 5000,
            _pendingResponseData: 0,
            maxHeadersCount: null,
            _connectionKey: '6::::3000',
            [Symbol(asyncId)]: 5
        }
    },
    sockets: {
        'BpHS-FCjMGS2y2gJAAAA': {
            nsp: [Circular],
            server: [Object],
            adapter: [Object],
            id: 'BpHS-FCjMGS2y2gJAAAA',
            client: [Object],
            conn: [Object],
            rooms: {},
            acks: {},
            connected: true,
            disconnected: false,
            handshake: [Object],
            fns: [],
            flags: {},
            _rooms: []
        }
    },
    connected: {
        'BpHS-FCjMGS2y2gJAAAA': {
            nsp: [Circular],
            server: [Object],
            adapter: [Object],
            id: 'BpHS-FCjMGS2y2gJAAAA',
            client: [Object],
            conn: [Object],
            rooms: {},
            acks: {},
            connected: true,
            disconnected: false,
            handshake: [Object],
            fns: [],
            flags: {},
            _rooms: []
        }
    },
    fns: [],
    ids: 0,
    rooms: [],
    flags: {},
    adapter: {
        nsp: [Circular],
        rooms: { 'BpHS-FCjMGS2y2gJAAAA': [Object] },
        sids: { 'BpHS-FCjMGS2y2gJAAAA': [Object] },
        encoder: {}
    },
    _events: { connection: [Function] },
    _eventsCount: 1
}
复制代码

socket.server

{
    nsps: {
        '/': {
            name: '/',
            server: [Circular],
            sockets: [Object],
            connected: [Object],
            fns: [],
            ids: 0,
            rooms: [],
            flags: {},
            adapter: [Object],
            _events: [Object],
            _eventsCount: 1
        }
    },
    parentNsps: {},
    _path: '/socket.io',
    _serveClient: true,
    parser: {
        protocol: 4,
        types: ['CONNECT',
            'DISCONNECT',
            'EVENT',
            'ACK',
            'ERROR',
            'BINARY_EVENT',
            'BINARY_ACK'],
        CONNECT: 0,
        DISCONNECT: 1,
        EVENT: 2,
        ACK: 3,
        ERROR: 4,
        BINARY_EVENT: 5,
        BINARY_ACK: 6,
        Encoder: [Function: Encoder],
        Decoder: [Function: Decoder]
    },
    encoder: {},
    _adapter: [Function: Adapter],
    _origins: '*:*',
    sockets: {
        name: '/',
        server: [Circular],
        sockets: { DbVOQepDl8PDxk5iAAAA: [Object] },
        connected: { DbVOQepDl8PDxk5iAAAA: [Object] },
        fns: [],
        ids: 0,
        rooms: [],
        flags: {},
        adapter: {
            nsp: [Circular],
            rooms: [Object],
            sids: [Object],
            encoder: {}
        },
        _events: { connection: [Function] },
        _eventsCount: 1
    },
    eio: {
        clients: { DbVOQepDl8PDxk5iAAAA: [Object] },
        clientsCount: 1,
        wsEngine: 'ws',
        pingTimeout: 5000,
        pingInterval: 25000,
        upgradeTimeout: 10000,
        maxHttpBufferSize: 100000000,
        transports: ['polling', 'websocket'],
        allowUpgrades: true,
        allowRequest: [Function: bound],
        cookie: 'io',
        cookiePath: '/',
        cookieHttpOnly: true,
        perMessageDeflate: { threshold: 1024 },
        httpCompression: { threshold: 1024 },
        initialPacket: ['0'],
        ws: {
            domain: null,
            _events: {},
            _eventsCount: 0,
            _maxListeners: undefined,
            options: [Object]
        },
        _events: { connection: [Function: bound] },
        _eventsCount: 1
    },
    engine: {
        clients: { DbVOQepDl8PDxk5iAAAA: [Object] },
        clientsCount: 1,
        wsEngine: 'ws',
        pingTimeout: 5000,
        pingInterval: 25000,
        upgradeTimeout: 10000,
        maxHttpBufferSize: 100000000,
        transports: ['polling', 'websocket'],
        allowUpgrades: true,
        allowRequest: [Function: bound],
        cookie: 'io',
        cookiePath: '/',
        cookieHttpOnly: true,
        perMessageDeflate: { threshold: 1024 },
        httpCompression: { threshold: 1024 },
        initialPacket: ['0'],
        ws: {
            domain: null,
            _events: {},
            _eventsCount: 0,
            _maxListeners: undefined,
            options: [Object]
        },
        _events: { connection: [Function: bound] },
        _eventsCount: 1
    },
    httpServer: {
        domain: null,
        _events: {
            connection: [Function: connectionListener],
            close: [Function: bound],
            listening: [Function: bound],
            upgrade: [Function],
            request: [Function]
        },
        _eventsCount: 5,
        _maxListeners: undefined,
        _connections: 1,
        _handle: {
            reading: false,
            owner: [Circular],
            onread: null,
            onconnection: [Function: onconnection],
            writeQueueSize: 0
        },
        _usingSlaves: false,
        _slaves: [],
        _unref: false,
        allowHalfOpen: true,
        pauseOnConnect: false,
        httpAllowHalfOpen: false,
        timeout: 120000,
        keepAliveTimeout: 5000,
        _pendingResponseData: 0,
        maxHeadersCount: null,
        _connectionKey: '6::::3000',
        [Symbol(asyncId)]: 5
    }
}
复制代码

socket.client

{
    server: {
        nsps: { '/': [Object] },
        parentNsps: {},
        _path: '/socket.io',
        _serveClient: true,
        parser: {
            protocol: 4,
            types: [Array],
            CONNECT: 0,
            DISCONNECT: 1,
            EVENT: 2,
            ACK: 3,
            ERROR: 4,
            BINARY_EVENT: 5,
            BINARY_ACK: 6,
            Encoder: [Function: Encoder],
            Decoder: [Function: Decoder]
        },
        encoder: {},
        _adapter: [Function: Adapter],
        _origins: '*:*',
        sockets: {
            name: '/',
            server: [Circular],
            sockets: [Object],
            connected: [Object],
            fns: [],
            ids: 0,
            rooms: [],
            flags: {},
            adapter: [Object],
            _events: [Object],
            _eventsCount: 1
        },
        eio: {
            clients: [Object],
            clientsCount: 1,
            wsEngine: 'ws',
            pingTimeout: 5000,
            pingInterval: 25000,
            upgradeTimeout: 10000,
            maxHttpBufferSize: 100000000,
            transports: [Array],
            allowUpgrades: true,
            allowRequest: [Function: bound],
            cookie: 'io',
            cookiePath: '/',
            cookieHttpOnly: true,
            perMessageDeflate: [Object],
            httpCompression: [Object],
            initialPacket: [Array],
            ws: [Object],
            _events: [Object],
            _eventsCount: 1
        },
        engine: {
            clients: [Object],
            clientsCount: 1,
            wsEngine: 'ws',
            pingTimeout: 5000,
            pingInterval: 25000,
            upgradeTimeout: 10000,
            maxHttpBufferSize: 100000000,
            transports: [Array],
            allowUpgrades: true,
            allowRequest: [Function: bound],
            cookie: 'io',
            cookiePath: '/',
            cookieHttpOnly: true,
            perMessageDeflate: [Object],
            httpCompression: [Object],
            initialPacket: [Array],
            ws: [Object],
            _events: [Object],
            _eventsCount: 1
        },
        httpServer: {
            domain: null,
            _events: [Object],
            _eventsCount: 5,
            _maxListeners: undefined,
            _connections: 1,
            _handle: [Object],
            _usingSlaves: false,
            _slaves: [],
            _unref: false,
            allowHalfOpen: true,
            pauseOnConnect: false,
            httpAllowHalfOpen: false,
            timeout: 120000,
            keepAliveTimeout: 5000,
            _pendingResponseData: 0,
            maxHeadersCount: null,
            _connectionKey: '6::::3000',
            [Symbol(asyncId)]: 5
        }
    },
    conn: {
        id: 'XxfVb9yEIAWNfBG8AAAA',
        server: {
            clients: [Object],
            clientsCount: 1,
            wsEngine: 'ws',
            pingTimeout: 5000,
            pingInterval: 25000,
            upgradeTimeout: 10000,
            maxHttpBufferSize: 100000000,
            transports: [Array],
            allowUpgrades: true,
            allowRequest: [Function: bound],
            cookie: 'io',
            cookiePath: '/',
            cookieHttpOnly: true,
            perMessageDeflate: [Object],
            httpCompression: [Object],
            initialPacket: [Array],
            ws: [Object],
            _events: [Object],
            _eventsCount: 1
        },
        upgrading: false,
        upgraded: false,
        readyState: 'open',
        writeBuffer: [],
        packetsFn: [],
        sentCallbackFn: [],
        cleanupFn: [[Function], [Function]],
        request: {
            _readableState: [Object],
            readable: true,
            domain: null,
            _events: {},
            _eventsCount: 0,
            _maxListeners: undefined,
            socket: [Object],
            connection: [Object],
            httpVersionMajor: 1,
            httpVersionMinor: 1,
            httpVersion: '1.1',
            complete: true,
            headers: [Object],
            rawHeaders: [Array],
            trailers: {},
            rawTrailers: [],
            upgrade: false,
            url: '/socket.io/?EIO=3&transport=polling&t=MDPhlAg',
            method: 'GET',
            statusCode: null,
            statusMessage: null,
            client: [Object],
            _consuming: false,
            _dumped: true,
            _query: [Object],
            res: [Object],
            cleanup: [Function: cleanup]
        },
        remoteAddress: '::ffff:127.0.0.1',
        checkIntervalTimer: null,
        upgradeTimeoutTimer: null,
        pingTimeoutTimer: {
            _called: false,
            _idleTimeout: 30000,
            _idlePrev: [Object],
            _idleNext: [Object],
            _idleStart: 2787,
            _onTimeout: [Function],
            _timerArgs: undefined,
            _repeat: null,
            _destroyed: false,
            [Symbol(asyncId)]: 15,
            [Symbol(triggerAsyncId)]: 11
        },
        transport: {
            readyState: 'open',
            discarded: false,
            closeTimeout: 30000,
            maxHttpBufferSize: 100000000,
            httpCompression: [Object],
            supportsBinary: true,
            _events: [Object],
            _eventsCount: 5,
            sid: 'XxfVb9yEIAWNfBG8AAAA',
            req: null,
            res: null,
            writable: false
        },
        _events: {
            close: [Array],
            data: [Function: bound],
            error: [Function: bound]
        },
        _eventsCount: 3
    },
    encoder: {},
    decoder: { reconstructor: null, _callbacks: { '$decoded': [Array] } },
    id: 'XxfVb9yEIAWNfBG8AAAA',
    request: {
        _readableState: {
            objectMode: false,
            highWaterMark: 16384,
            buffer: [Object],
            length: 0,
            pipes: null,
            pipesCount: 0,
            flowing: true,
            ended: true,
            endEmitted: false,
            reading: false,
            sync: true,
            needReadable: false,
            emittedReadable: true,
            readableListening: false,
            resumeScheduled: true,
            destroyed: false,
            defaultEncoding: 'utf8',
            awaitDrain: 0,
            readingMore: true,
            decoder: null,
            encoding: null
        },
        readable: true,
        domain: null,
        _events: {},
        _eventsCount: 0,
        _maxListeners: undefined,
        socket: {
            connecting: false,
            _hadError: false,
            _handle: [Object],
            _parent: null,
            _host: null,
            _readableState: [Object],
            readable: true,
            domain: null,
            _events: [Object],
            _eventsCount: 10,
            _maxListeners: undefined,
            _writableState: [Object],
            writable: true,
            allowHalfOpen: true,
            _bytesDispatched: 375,
            _sockname: null,
            _pendingData: null,
            _pendingEncoding: '',
            server: [Object],
            _server: [Object],
            _idleTimeout: 5000,
            _idleNext: [Object],
            _idlePrev: [Object],
            _idleStart: 2800,
            _destroyed: false,
            parser: [Object],
            on: [Function: socketOnWrap],
            _paused: false,
            read: [Function],
            _consuming: true,
            _httpMessage: null,
            _peername: [Object],
            [Symbol(asyncId)]: 7,
            [Symbol(bytesRead)]: 0,
            [Symbol(asyncId)]: 9,
            [Symbol(triggerAsyncId)]: 5
        },
        connection: {
            connecting: false,
            _hadError: false,
            _handle: [Object],
            _parent: null,
            _host: null,
            _readableState: [Object],
            readable: true,
            domain: null,
            _events: [Object],
            _eventsCount: 10,
            _maxListeners: undefined,
            _writableState: [Object],
            writable: true,
            allowHalfOpen: true,
            _bytesDispatched: 375,
            _sockname: null,
            _pendingData: null,
            _pendingEncoding: '',
            server: [Object],
            _server: [Object],
            _idleTimeout: 5000,
            _idleNext: [Object],
            _idlePrev: [Object],
            _idleStart: 2800,
            _destroyed: false,
            parser: [Object],
            on: [Function: socketOnWrap],
            _paused: false,
            read: [Function],
            _consuming: true,
            _httpMessage: null,
            _peername: [Object],
            [Symbol(asyncId)]: 7,
            [Symbol(bytesRead)]: 0,
            [Symbol(asyncId)]: 9,
            [Symbol(triggerAsyncId)]: 5
        },
        httpVersionMajor: 1,
        httpVersionMinor: 1,
        httpVersion: '1.1',
        complete: true,
        headers: {
            host: 'localhost:3000',
            connection: 'keep-alive',
            accept: '*/*',
            origin: 'null',
            'user-agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36',
            dnt: '1',
            'accept-encoding': 'gzip, deflate, br',
            'accept-language': 'zh,zh-CN;q=0.9,en;q=0.8',
            cookie: '_ga=GA1.1.303873506.1517909567; Hm_lvt_b46541a9e9801d293566f07893cba904=1522150030,1522204209; user=%E9%92%9F%E5%AE%B6%E9%93%AD; io=DbVOQepDl8PDxk5iAAAA'
        },
        rawHeaders: [
            'Host',
            'localhost:3000',
            'Connection',
            'keep-alive',
            'Accept',
            '*/*',
            'Origin',
            'null',
            'User-Agent',
            'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36',
            'DNT',
            '1',
            'Accept-Encoding',
            'gzip, deflate, br',
            'Accept-Language',
            'zh,zh-CN;q=0.9,en;q=0.8',
            'Cookie',
            '_ga=GA1.1.303873506.1517909567; Hm_lvt_b46541a9e9801d293566f07893cba904=1522150030,1522204209; user=%E9%92%9F%E5%AE%B6%E9%93%AD; io=DbVOQepDl8PDxk5iAAAA'
        ],
        trailers: {},
        rawTrailers: [],
        upgrade: false,
        url: '/socket.io/?EIO=3&transport=polling&t=MDPhlAg',
        method: 'GET',
        statusCode: null,
        statusMessage: null,
        client: {
            connecting: false,
            _hadError: false,
            _handle: [Object],
            _parent: null,
            _host: null,
            _readableState: [Object],
            readable: true,
            domain: null,
            _events: [Object],
            _eventsCount: 10,
            _maxListeners: undefined,
            _writableState: [Object],
            writable: true,
            allowHalfOpen: true,
            _bytesDispatched: 375,
            _sockname: null,
            _pendingData: null,
            _pendingEncoding: '',
            server: [Object],
            _server: [Object],
            _idleTimeout: 5000,
            _idleNext: [Object],
            _idlePrev: [Object],
            _idleStart: 2800,
            _destroyed: false,
            parser: [Object],
            on: [Function: socketOnWrap],
            _paused: false,
            read: [Function],
            _consuming: true,
            _httpMessage: null,
            _peername: [Object],
            [Symbol(asyncId)]: 7,
            [Symbol(bytesRead)]: 0,
            [Symbol(asyncId)]: 9,
            [Symbol(triggerAsyncId)]: 5
        },
        _consuming: false,
        _dumped: true,
        _query: { EIO: '3', transport: 'polling', t: 'MDPhlAg' },
        res: {
            domain: null,
            _events: [Object],
            _eventsCount: 1,
            _maxListeners: undefined,
            output: [],
            outputEncodings: [],
            outputCallbacks: [],
            outputSize: 0,
            writable: true,
            _last: false,
            upgrading: false,
            chunkedEncoding: false,
            shouldKeepAlive: true,
            useChunkedEncodingByDefault: true,
            sendDate: true,
            _removedConnection: false,
            _removedContLen: false,
            _removedTE: false,
            _contentLength: null,
            _hasBody: true,
            _trailer: '',
            finished: true,
            _headerSent: true,
            socket: null,
            connection: null,
            _header: 'HTTP/1.1 200 OK\r\nContent-Type: text/plain; charset=UTF-8\r\nContent-Length: 103\r\nAccess-Control-Allow-Credentials: true\r\nAccess-Control-Allow-Origin: null\r\nSet-Cookie: io=XxfVb9yEIAWNfBG8AAAA; Path=/; HttpOnly\r\nDate: Sun, 13 May 2018 13:27:07 GMT\r\nConnection: keep-alive\r\n\r\n',
            _onPendingData: [Function: bound updateOutgoingData],
            _sent100: false,
            _expect_continue: false,
            statusMessage: 'OK',
            statusCode: 200,
            [Symbol(outHeadersKey)]: null
        },
        cleanup: [Function: cleanup]
    },
    onclose: [Function: bound],
    ondata: [Function: bound],
    onerror: [Function: bound],
    ondecoded: [Function: bound],
    sockets: {
        XxfVb9yEIAWNfBG8AAAA: {
            nsp: [Object],
            server: [Object],
            adapter: [Object],
            id: 'XxfVb9yEIAWNfBG8AAAA',
            client: [Circular],
            conn: [Object],
            rooms: {},
            acks: {},
            connected: true,
            disconnected: false,
            handshake: [Object],
            fns: [],
            flags: {},
            _rooms: []
        }
    },
    nsps: {
        '/': {
            nsp: [Object],
            server: [Object],
            adapter: [Object],
            id: 'XxfVb9yEIAWNfBG8AAAA',
            client: [Circular],
            conn: [Object],
            rooms: {},
            acks: {},
            connected: true,
            disconnected: false,
            handshake: [Object],
            fns: [],
            flags: {},
            _rooms: []
        }
    },
    connectBuffer: []
}
复制代码

socket.conn

{
    id: 'L99Yrojc8dUPP4IyAAAA',
    server: {
        clients: { L99Yrojc8dUPP4IyAAAA: [Circular] },
        clientsCount: 1,
        wsEngine: 'ws',
        pingTimeout: 5000,
        pingInterval: 25000,
        upgradeTimeout: 10000,
        maxHttpBufferSize: 100000000,
        transports: ['polling', 'websocket'],
        allowUpgrades: true,
        allowRequest: [Function: bound],
        cookie: 'io',
        cookiePath: '/',
        cookieHttpOnly: true,
        perMessageDeflate: { threshold: 1024 },
        httpCompression: { threshold: 1024 },
        initialPacket: ['0'],
        ws: {
            domain: null,
            _events: {},
            _eventsCount: 0,
            _maxListeners: undefined,
            options: [Object]
        },
        _events: { connection: [Function: bound] },
        _eventsCount: 1
    },
    upgrading: false,
    upgraded: false,
    readyState: 'open',
    writeBuffer: [],
    packetsFn: [],
    sentCallbackFn: [],
    cleanupFn: [[Function], [Function]],
    request: {
        _readableState: {
            objectMode: false,
            highWaterMark: 16384,
            buffer: [Object],
            length: 0,
            pipes: null,
            pipesCount: 0,
            flowing: true,
            ended: true,
            endEmitted: false,
            reading: false,
            sync: true,
            needReadable: false,
            emittedReadable: true,
            readableListening: false,
            resumeScheduled: true,
            destroyed: false,
            defaultEncoding: 'utf8',
            awaitDrain: 0,
            readingMore: true,
            decoder: null,
            encoding: null
        },
        readable: true,
        domain: null,
        _events: {},
        _eventsCount: 0,
        _maxListeners: undefined,
        socket: {
            connecting: false,
            _hadError: false,
            _handle: [Object],
            _parent: null,
            _host: null,
            _readableState: [Object],
            readable: true,
            domain: null,
            _events: [Object],
            _eventsCount: 10,
            _maxListeners: undefined,
            _writableState: [Object],
            writable: true,
            allowHalfOpen: true,
            _bytesDispatched: 375,
            _sockname: null,
            _pendingData: null,
            _pendingEncoding: '',
            server: [Object],
            _server: [Object],
            _idleTimeout: 5000,
            _idleNext: [Object],
            _idlePrev: [Object],
            _idleStart: 841,
            _destroyed: false,
            parser: [Object],
            on: [Function: socketOnWrap],
            _paused: false,
            read: [Function],
            _consuming: true,
            _httpMessage: null,
            _peername: [Object],
            [Symbol(asyncId)]: 7,
            [Symbol(bytesRead)]: 0,
            [Symbol(asyncId)]: 9,
            [Symbol(triggerAsyncId)]: 5
        },
        connection: {
            connecting: false,
            _hadError: false,
            _handle: [Object],
            _parent: null,
            _host: null,
            _readableState: [Object],
            readable: true,
            domain: null,
            _events: [Object],
            _eventsCount: 10,
            _maxListeners: undefined,
            _writableState: [Object],
            writable: true,
            allowHalfOpen: true,
            _bytesDispatched: 375,
            _sockname: null,
            _pendingData: null,
            _pendingEncoding: '',
            server: [Object],
            _server: [Object],
            _idleTimeout: 5000,
            _idleNext: [Object],
            _idlePrev: [Object],
            _idleStart: 841,
            _destroyed: false,
            parser: [Object],
            on: [Function: socketOnWrap],
            _paused: false,
            read: [Function],
            _consuming: true,
            _httpMessage: null,
            _peername: [Object],
            [Symbol(asyncId)]: 7,
            [Symbol(bytesRead)]: 0,
            [Symbol(asyncId)]: 9,
            [Symbol(triggerAsyncId)]: 5
        },
        httpVersionMajor: 1,
        httpVersionMinor: 1,
        httpVersion: '1.1',
        complete: true,
        headers: {
            host: 'localhost:3000',
            connection: 'keep-alive',
            accept: '*/*',
            origin: 'null',
            'user-agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36',
            dnt: '1',
            'accept-encoding': 'gzip, deflate, br',
            'accept-language': 'zh,zh-CN;q=0.9,en;q=0.8',
            cookie: '_ga=GA1.1.303873506.1517909567; Hm_lvt_b46541a9e9801d293566f07893cba904=1522150030,1522204209; user=%E9%92%9F%E5%AE%B6%E9%93%AD; io=XxfVb9yEIAWNfBG8AAAA'
        },
        rawHeaders: ['Host',
            'localhost:3000',
            'Connection',
            'keep-alive',
            'Accept',
            '*/*',
            'Origin',
            'null',
            'User-Agent',
            'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36',
            'DNT',
            '1',
            'Accept-Encoding',
            'gzip, deflate, br',
            'Accept-Language',
            'zh,zh-CN;q=0.9,en;q=0.8',
            'Cookie',
            '_ga=GA1.1.303873506.1517909567; Hm_lvt_b46541a9e9801d293566f07893cba904=1522150030,1522204209; user=%E9%92%9F%E5%AE%B6%E9%93%AD; io=XxfVb9yEIAWNfBG8AAAA'],
        trailers: {},
        rawTrailers: [],
        upgrade: false,
        url: '/socket.io/?EIO=3&transport=polling&t=MDPkJ-k',
        method: 'GET',
        statusCode: null,
        statusMessage: null,
        client: {
            connecting: false,
            _hadError: false,
            _handle: [Object],
            _parent: null,
            _host: null,
            _readableState: [Object],
            readable: true,
            domain: null,
            _events: [Object],
            _eventsCount: 10,
            _maxListeners: undefined,
            _writableState: [Object],
            writable: true,
            allowHalfOpen: true,
            _bytesDispatched: 375,
            _sockname: null,
            _pendingData: null,
            _pendingEncoding: '',
            server: [Object],
            _server: [Object],
            _idleTimeout: 5000,
            _idleNext: [Object],
            _idlePrev: [Object],
            _idleStart: 841,
            _destroyed: false,
            parser: [Object],
            on: [Function: socketOnWrap],
            _paused: false,
            read: [Function],
            _consuming: true,
            _httpMessage: null,
            _peername: [Object],
            [Symbol(asyncId)]: 7,
            [Symbol(bytesRead)]: 0,
            [Symbol(asyncId)]: 9,
            [Symbol(triggerAsyncId)]: 5
        },
        _consuming: false,
        _dumped: true,
        _query: { EIO: '3', transport: 'polling', t: 'MDPkJ-k' },
        res: {
            domain: null,
            _events: [Object],
            _eventsCount: 1,
            _maxListeners: undefined,
            output: [],
            outputEncodings: [],
            outputCallbacks: [],
            outputSize: 0,
            writable: true,
            _last: false,
            upgrading: false,
            chunkedEncoding: false,
            shouldKeepAlive: true,
            useChunkedEncodingByDefault: true,
            sendDate: true,
            _removedConnection: false,
            _removedContLen: false,
            _removedTE: false,
            _contentLength: null,
            _hasBody: true,
            _trailer: '',
            finished: true,
            _headerSent: true,
            socket: null,
            connection: null,
            _header: 'HTTP/1.1 200 OK\r\nContent-Type: text/plain; charset=UTF-8\r\nContent-Length: 103\r\nAccess-Control-Allow-Credentials: true\r\nAccess-Control-Allow-Origin: null\r\nSet-Cookie: io=L99Yrojc8dUPP4IyAAAA; Path=/; HttpOnly\r\nDate: Sun, 13 May 2018 13:38:23 GMT\r\nConnection: keep-alive\r\n\r\n',
            _onPendingData: [Function: bound updateOutgoingData],
            _sent100: false,
            _expect_continue: false,
            statusMessage: 'OK',
            statusCode: 200,
            [Symbol(outHeadersKey)]: null
        },
        cleanup: [Function: cleanup]
    },
    remoteAddress: '::1',
    checkIntervalTimer: null,
    upgradeTimeoutTimer: null,
    pingTimeoutTimer: {
        _called: false,
        _idleTimeout: 30000,
        _idlePrev: {
            _idleNext: [Circular],
            _idlePrev: [Circular],
            _timer: [Object],
            _unrefed: false,
            msecs: 30000,
            nextTick: false
        },
        _idleNext: {
            _idleNext: [Circular],
            _idlePrev: [Circular],
            _timer: [Object],
            _unrefed: false,
            msecs: 30000,
            nextTick: false
        },
        _idleStart: 829,
        _onTimeout: [Function],
        _timerArgs: undefined,
        _repeat: null,
        _destroyed: false,
        [Symbol(asyncId)]: 15,
        [Symbol(triggerAsyncId)]: 11
    },
    transport: {
        readyState: 'open',
        discarded: false,
        closeTimeout: 30000,
        maxHttpBufferSize: 100000000,
        httpCompression: { threshold: 1024 },
        supportsBinary: true,
        _events: {
            error: [Object],
            packet: [Function: bound],
            drain: [Array],
            close: [Object],
            headers: [Function]
        },
        _eventsCount: 5,
        sid: 'L99Yrojc8dUPP4IyAAAA',
        req: null,
        res: null,
        writable: false
    },
    _events: {
        close: [[Object], [Function: bound]],
        data: [Function: bound],
        error: [Function: bound]
    },
    _eventsCount: 3
}
复制代码
<think>我们正在讨论Java中的Socket对象(用于TCP通信)的成员变量。注意,这里讨论的是Java标准库中的java.net.Socket类。 根据引用内容,虽然引用中提到了Socket的构造方法和使用示例,但没有直接列出成员变量。因此,我们需要结合Java官方文档和常见实现(如OpenJDK)来回答。 在Java中,Socket类的成员变量通常是私有的,并且不同版本的JDK实现可能略有不同。以下是一些常见的成员变量(基于OpenJDK的实现): 1. **SocketImpl impl**: 这是实际实现Socket操作的对象,它遵循了设计模式中的桥接模式。具体的网络操作由SocketImpl的子类(如PlainSocketImpl)完成。 2. **boolean created**: 标记Socket是否已经被创建。 3. **boolean bound**: 标记Socket是否已经绑定到本地端口。 4. **boolean connected**: 标记Socket是否已经连接到远程主机。 5. **boolean closed**: 标记Socket是否已经关闭。 6. **boolean closeLock**: 用于关闭操作时的同步锁。 7. **boolean shutIn**: 输入流是否已经被关闭。 8. **boolean shutOut**: 输出流是否已经被关闭。 此外,还有一些与连接相关的状态变量,例如: 9. **InetAddress address**: 远程主机的IP地址。 10. **int port**: 远程主机的端口号。 11. **InetAddress localAddress**: 本地绑定的IP地址。 12. **int localPort**: 本地绑定的端口号。 注意:在Java中,我们通常不直接访问这些成员变量,而是通过公共方法(如getInetAddress()、getPort()等)来获取相关信息。 下面是一个简化的示例,展示如何通过Socket对象获取连接信息(这些信息实际上来自上述成员变量): ```java import java.net.Socket; public class SocketExample { public static void main(String[] args) throws Exception { Socket socket = new Socket("www.example.com", 80); System.out.println("远程地址: " + socket.getInetAddress()); System.out.println("远程端口: " + socket.getPort()); System.out.println("本地地址: " + socket.getLocalAddress()); System.out.println("本地端口: " + socket.getLocalPort()); socket.close(); } } ``` 输出示例: ``` 远程地址: www.example.com/93.184.216.34 远程端口: 80 本地地址: /192.168.1.5 本地端口: 54321 ``` 另外,引用[4]中提到了Node.js中Net.Socket对象的属性,这些属性与Java的Socket类有相似之处,但属于不同的语言和运行时环境。在Java中,我们通常使用上述方法获取类似信息。 总结一下,Java的Socket对象包含的成员变量主要涉及: - 底层实现对象(SocketImpl) - 状态标记(created, bound, connected, closed, shutIn, shutOut) - 连接信息(远程地址和端口、本地地址和端口) 这些成员变量被封装在Socket类内部,用户通过公共方法来访问。 注意:由于Java的Socket类实现可能因版本而异,上述成员变量列表仅供参考。在实际编程中,我们应避免使用反射等机制直接访问这些私有变量。 §§相关问题§§ 1. Java中Socket和ServerSocket的区别是什么? 2. 如何设置Socket的连接超时时间? 3. Socket的输入输出流是如何工作的? 4. 如何检测Socket连接是否已经关闭?</think>### Java Socket对象的成员变量详解 在Java网络编程中,`java.net.Socket`类是实现TCP客户端程序的核心类,其内部通过多个成员变量管理连接状态和数据传输。以下是关键成员变量及其作用: #### 核心成员变量 1. **连接状态变量** ```java private boolean created = false; // Socket是否已创建 private boolean bound = false; // 是否绑定到本地端口 private boolean connected = false; // 是否已建立连接 private boolean closed = false; // 是否已关闭 private volatile boolean shutIn = false; // 输入流是否关闭 private volatile boolean shutOut = false; // 输出流是否关闭 ``` 2. **地址与端口信息** ```java private InetAddress address; // 远程主机IP地址 private int port; // 远程主机端口 private InetAddress localAddress; // 本地绑定IP地址 private int localPort; // 本地绑定端口 ``` 3. **底层实现对象** ```java private SocketImpl impl; // 实际执行网络操作的实现对象 ``` - 遵循**桥接设计模式**,通过`PlainSocketImpl`等实现类完成系统级socket调用 4. **流管理对象** ```java private InputStream in; // 输入流(接收数据) private OutputStream out; // 输出流(发送数据) ``` - 通过`getInputStream()`和`getOutputStream()`暴露给开发者[^2][^5] 5. **同步控制** ```java private final Object closeLock = new Object(); // 关闭操作的同步锁 private Object readLock = new Object(); // 读操作锁 private Object writeLock = new Object(); // 写操作锁 ``` #### 连接建立过程(成员变量变化) ```mermaid stateDiagram-v2 [*] --> Created: new Socket() Created --> Bound: bind()调用 Bound --> Connected: connect()成功 Connected --> DataTransfer: 读写数据 DataTransfer --> Closed: close()调用 Closed --> [*] ``` #### 典型应用场景中的成员变量 1. **TCP客户端连接**(引用[1][^1]) ```java Socket socket = new Socket("127.0.0.1", 8080); // 此时成员变量: // address = InetAddress.getByName("127.0.0.1") // port = 8080 // connected = true ``` 2. **对象传输**(引用[2][^5]) ```java ObjectOutputStream out = new ObjectOutputStream( socket.getOutputStream()); // 使用out成员变量 out.writeObject(userObj); ``` 3. **连接状态检查** ```java if(socket.isConnected() && !socket.isClosed()) { // 安全进行数据传输 } ``` #### 与ServerSocket的协作关系 ```mermaid sequenceDiagram Client->>ServerSocket: new Socket(ip, port) ServerSocket->>Server: 创建新Socket对象 Note right of Server: 成员变量初始化: Server-->>Client: accept()返回新Socket Client->>Client: 设置address/port等变量 Client->>Server: 通过out发送数据 Server->>Client: 通过in接收数据 ``` #### 重要技术细节 1. **超时控制变量** ```java private int timeout; // SO_TIMEOUT值(毫秒) ``` - 通过`setSoTimeout(5000)`设置读取超时为5秒 2. **性能统计变量** ```java private long bytesTransferred; // 传输字节数统计 ``` - 可通过反射获取(非官方API) 3. **Nagle算法控制** ```java private boolean tcpNoDelay = false; // 默认启用Nagle算法 ``` - 通过`setTcpNoDelay(true)`禁用Nagle算法提升实时性 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值