Socket.io-client: рд╣реИрдВрдбрд╢реЗрдХ рд╣реЗрдбрд░ рддрдХ рдкрд╣реБрдВрдЪ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдВ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 14 рдорд╛рд░реНрдЪ 2014  ┬╖  19рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: socketio/socket.io-client

рдХрдиреЗрдХреНрд╢рди рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╕рдордп, рдореИрдВ io.connect(url, {query:'key=value'}) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреНрд╡реЗрд░реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рддрдХ 'рдПрдХреНрд╕реЗрд╕' рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред

рдореБрдЭреЗ рд╣реЗрдбрд░ рдХреЗ рд╕рд╛рде рдХреБрдЫ рдРрд╕рд╛ рд╣реА рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреА рдЙрдореНрдореАрдж рдереАред

рдореИрдВ рдЯреЛрдХрди рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреЗ рд╕рд╛рде рд╡реЗрдмрдкреА рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

+1 рдЗрд╕ рдкрд░ рдХреЛрдИ рдЕрдкрдбреЗрдЯ?

рд╕рднреА 19 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдЗрд╕реЗ рднреА рд▓реЗрдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдиреБрд░реЛрдз рдХрд░рддреЗ рд╕рдордп рд╣реЗрдбрд░ рдХреЛ 'рд╕реЗрдЯ' рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛ред

рд╢реАрд░реНрд╖рд▓реЗрдЦ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рдиреЗ рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдХреБрдЫ рдкрд░рд┐рд╡рд╣рди рдЙрдиреНрд╣реЗрдВ рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддреЗ рд╣реИрдВ:

  • WebSocket рдХрд╕реНрдЯрдо рд╣реЗрдбрд░ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ
  • JSONP рдорддрджрд╛рди (рдЙрд░реНрдл <script> ) рдЙрдиреНрд╣реЗрдВ рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддреЗ

рдПрдХрдорд╛рддреНрд░ рд╢рд░реНрдд рдЬреЛ рд╣рдореЗрдВ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реЗрдбрд░ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ, рд╡рд╣ рд╣реИ рд╕реЙрдХреЗрдЯ.рдЖрдИрдУ рдХреЛ рдХреЗрд╡рд▓ рдПрдХреНрд╕рдПрдЪрдЖрд░ рдкреЛрд▓рд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рдирд╛

рдореИрдВ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЛ рдкреНрд░рдорд╛рдгрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд╕рдорд╛рди рдХреБрдЫ рдЙрдореНрдореАрдж рдХрд░ рд░рд╣рд╛ рдерд╛ред рдХреНрд╡реЗрд░реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдЯреЛрдХрди (рдпрд╛ рдкрд╛рд╕рд╡рд░реНрдб) рднреЗрдЬрдирд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рд╣реИред

рдореИрдВрдиреЗ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдмреЙрдбреА рдореЗрдВ рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдореЙрдбреНрдпреВрд▓ рдмрдирд╛рдпрд╛ рд╣реИ: https://github.com/invisiblejs/socketio-auth

@rauchg рдХреНрдпрд╛ рдЖрдк рдЖрдЧреЗ рдмрддрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ https://github.com/Automattic/socket.io/wiki/authorizing#handshaking рдкрд░ рдкреНрд░рд▓реЗрдЦрди рдХрд╣рддрд╛ рд╣реИ:

The handshake is initiated with either an XHR request or a JSONP request

рдЪреВрдВрдХрд┐:

Users might want to authorize the clients based on information from the headers or IP address

рддрдм рд╕реЗ:

Not all transports sends headers when they attempt to establish a real time connection with the server

рддреЛ рдХреНрдпрд╛ рдпрд╣ рдЗрдВрдЧрд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЕрднреА рднреА рдПрдХ рдбрдмреНрд▓реНрдпреВрдПрд╕ рдХрдиреЗрдХреНрд╢рди рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рднрд▓реЗ рд╣реА рд╣реИрдВрдбрд╢реЗрдХ рдПрдХреНрд╕рдПрдЪрдЖрд░ рдореЗрдВ рдерд╛, рдФрд░ рдЗрд╕рд▓рд┐рдП рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдз рд╣реЗрдбрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдареАрдХ рд╣реИ?

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдЪрд░рдг рдореЗрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреЛрдб рдерд╛ https://github.com/Automattic/socket.io-client/issues/344#issuecomment -9424237

рддреЛ рдореИрдВ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рд╕рдорд╕реНрдпрд╛рдПрдВ рдереАрдВ рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдХреБрдХреАрдЬрд╝ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдореБрдЦреНрдп рд░реЗрдкреЛ рдореЗрдВ рдХрднреА рдирд╣реАрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╕рд░реНрд╡рд░ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдЬреЛ рдереЛрдбрд╝рд╛ рднреНрд░рд╛рдордХ рд╣реИ http://socket.io/docs/server-api/#namespace #use%28fn:function%29:namespace

var io = require('socket.io')();
io.use(function(socket, next){
  if (socket.request.headers.cookie) return next();
  next(new Error('Authentication error'));
});

рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдХреБрдХреАрдЬрд╝ (рдпрд╛рдиреА рд╣реЗрдбрд░) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдФрд░ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдореБрдЦреНрдп рд╕рд╛рдЗрдЯ рдкрд░ рдЕрдкреНрд░рдЪрд▓рд┐рдд рдкреНрд░рдорд╛рдгреАрдХрд░рдг рд╡рд┐рдХреА рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ рдПрдХ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдЬреЛрдбрд╝реЗрдВ рдФрд░ рдЕрдиреНрдп рджреГрд╖реНрдЯрд┐рдХреЛрдгреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░реЗрдВ рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдкрд░рд┐рджреГрд╢реНрдп рд╣реИред

рдЗрд╕рдХреЗ рдХреБрдЫ рд╕рдВрдХрд▓реНрдк рдХреЗ рд▓рд┐рдП +1ред рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдФрд░ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдиреЗ рдореЗрд░рд╛ рд╕рдордп рдЦрд╛ рд▓рд┐рдпрд╛ рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рдЯреЛрдХрди рдСрде рдХреЗ рд▓рд┐рдП рд╣реЗрдбрд░ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рдкрд╣реБрдВрдЪ рдХреА рдЙрдореНрдореАрдж рдереАред

+1ред engine.io рдХреНрд▓рд╛рдЗрдВрдЯ рдХреА рдЖрдЧрд╛рдореА рд░рд┐рд▓реАрдЬрд╝ рд╣реИ рдЬреЛ рд╣реЗрдбрд░ рддрдХ рдкрд╣реБрдБрдЪ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рддреА рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рд╕реБрд╡рд┐рдзрд╛ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред
https://github.com/socketio/engine.io-client/pull/379

рдХреНрдпрд╛ рдпрд╣ рдХреНрд▓рд╛рдЗрдВрдЯ JS рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реЗ рднреА рдЙрдкрд▓рдмреНрдз рд╣реИ? рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХреНрдпрд╛ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрднреА рдЕрдВрджрд░ рдЖрдпрд╛? рдореИрдВ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рд╡рд┐рд▓рдп рд╣реЛ рдЧрдпрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рдЪрд╛рд▓реВ рд╣реИ, рдЧрд▓рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ

+1ред рдореИрдВрдиреЗ рдРрд╕реА рд╣реА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рднрд╛рдЧ рд▓рд┐рдпрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдореБрдЭреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдкреНрд░рдорд╛рдгрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╕реЙрдХреЗрдЯ.рдЖрдИрдУ-рдХреНрд▓рд╛рдЗрдВрдЯ рдЗрд╕реЗ рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред

+1 рдЗрд╕ рдкрд░ рдХреЛрдИ рдЕрдкрдбреЗрдЯ?

рдЗрд╕ рдкрд░ рдХреЛрдИ рдЕрдкрдбреЗрдЯ?

рдЗрд╕ рдкрд░ рдХреЛрдИ рдЕрдкрдбреЗрдЯ?

рдЪреВрдВрдХрд┐ 2.0.0 , рдЕрдм рдЖрдк рдПрдХ extraHeaders рд╡рд╕реНрддреБ рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

const socket = io({
  transportOptions: {
    polling: {
      extraHeaders: {
        'x-clientid': 'abc'
      }
    }
  }
});

рдпрд╣рд╛рдВ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ред

рдЪреВрдВрдХрд┐ 2.0.0 , рдЕрдм рдЖрдк рдПрдХ extraHeaders рд╡рд╕реНрддреБ рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

const socket = io({
  transportOptions: {
    polling: {
      extraHeaders: {
        'x-clientid': 'abc'
      }
    }
  }
});

рдпрд╣рд╛рдВ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ред

рдореБрдЭреЗ рдЗрд╕рдХреЗ рд╕рд╛рде рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд CORS рддреНрд░реБрдЯрд┐ рдорд┐рд▓ рд░рд╣реА рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ cors рд╕рд╛рде рдореЗрдВ express :

рдкреНрд░реАрдлреНрд▓рд╛рдЗрдЯ рдЕрдиреБрд░реЛрдз рдХрд╛ рдЬрд╡рд╛рдм рдПрдХреНрд╕реЗрд╕ рдХрдВрдЯреНрд░реЛрд▓ рдЪреЗрдХ рдкрд╛рд╕ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ: рдЗрд╕рдореЗрдВ HTTP рдареАрдХ рд╕реНрдерд┐рддрд┐ рдирд╣реАрдВ рд╣реИред

@ 4nubhav рдЖрдкрдХреЛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдПрдХ рд╣реИрдВрдбрд▓рдкреНрд░реЗрдлрд▓рд╛рдЗрдЯ рд░рд┐рдХреНрд╡реЗрд╕реНрдЯ рдлрдВрдХреНрд╢рди рдкрд╛рд╕ рдХрд░рдирд╛ рд╣реЛрдЧрд╛:

    handlePreflightRequest: (request, response) => {
        const headers = { ... };
        response.writeHead(200, headers);
        response.end();
    }

рдЪреВрдВрдХрд┐ 2.0.0 , рдЕрдм рдЖрдк рдПрдХ extraHeaders рд╡рд╕реНрддреБ рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

const socket = io({
  transportOptions: {
    polling: {
      extraHeaders: {
        'x-clientid': 'abc'
      }
    }
  }
});

рдпрд╣рд╛рдВ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ред

рдореИрдВ рд╕реЙрдХреЗрдЯ рд╕рд░реНрд╡рд░ рдореЗрдВ .of("/path") рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рдлрд┐рд░ рдореИрдВ рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реВрдВ рдЬрд╣рд╛рдВ рдореИрдВ рдпреВрдЖрд░рдПрд▓ рдШреЛрд╖рд┐рдд рдХрд░рддрд╛ рд╣реВрдВред

@ 4nubhav рдЖрдкрдХреЛ рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рдкрд░ рдЙрд╕ рд╣реЗрдбрд░ рдХреЛ handlePreflightRequest рдХреЗ рд╕рд╛рде рдЕрдиреБрдорддрд┐ рджреЗрдиреА рдЪрд╛рд╣рд┐рдПред

const options = {
    handlePreflightRequest: (req, res) => {
        res.writeHead(200, {
            'Access-Control-Allow-Headers': 'x-clientid', // <<< this
        });
        res.end();
     },
};
const io = require('socket.io')(server, options);

рдЕрджреНрдпрддрди: Socket.IO v3 рдореЗрдВ, transportOptions рдХреА рдЕрдм рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЖрдк рдмрд╕ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

const socket = io({
  extraHeaders: {
    'x-clientid': 'abc'
  }
});

рдХреЙрд░реНрд╕ рдХреЗ рд▓рд┐рдП рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг:

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

Sairyss picture Sairyss  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

exilonX picture exilonX  ┬╖  7рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

zappfinger picture zappfinger  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

patrickbussmann picture patrickbussmann  ┬╖  6рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

BorntraegerMarc picture BorntraegerMarc  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ