zxCoder
V2EX  ›  Node.js

nodejs 的 socket 是怎么回事

  •  
  •   zxCoder · Dec 4, 2020 · 3003 views
    This topic created in 1990 days ago, the information mentioned may be changed or developed.
    server.on('connection', (client) => {
            client.on('data', (msg)=> {
            });
            client.on('error',  (e)=> {
                client.end();
            });
            client.on( 'close', ()=> {
                console.log(`客户端下线了`);
            });
        });
    

    怎么像别的语言一样,不是要定义一个缓冲区吗,然后缓冲区满再读取数据解析,这里直接在 data 事件中接收数据是什么意思,客户端如果 for 循环发送,服务端要怎么接收呢

    Supplement 1  ·  Dec 4, 2020

    有时候接受的多,有时候接收的少

    8 replies    2021-02-01 12:27:37 +08:00
    echowuhao
        1
    echowuhao  
       Dec 4, 2020
    node js event loop 学习一下。
    borisz
        3
    borisz  
       Dec 4, 2020
    服务器端的确是会有时候接收多,有时候少的, 需要自己缓存切分
    cheneydog
        4
    cheneydog  
       Dec 4, 2020
    不都是这样么?哪个语言难道会帮你自动分包。
    no1xsyzy
        5
    no1xsyzy  
       Dec 4, 2020
    运行时帮你建议缓冲区、读取了不少信息,然后把缓冲区的内容建立成 msg 传给你的函数,然后你还需要再建一个缓冲区去保存这些 msg 并且解析 —— 当然大部分情况下拼接字符串了事。

    可能你没明白 on 注册回调的意思,你的这个 on 进去的 (msg) => {} 是一个被保存并可反复调用的回调函数。如果客户端发送了不少,你的回调函数会被调用多次。
    Mutoo
        6
    Mutoo  
       Dec 4, 2020
    粘包警察呢 :doge:
    viakiba
        7
    viakiba  
       Dec 4, 2020 via iPhone
    length key payload
    togou
        8
    togou  
       Feb 1, 2021
    这根 epoll 有可读消息 然后读好了的数据返回在 msg 里面有什么区别么 你存起来然后解析一下就行
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3075 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 37ms · UTC 08:12 · PVG 16:12 · LAX 01:12 · JFK 04:12
    ♥ Do have faith in what you're doing.