рдЕрддрд┐рд░рд┐рдХреНрдд рд╣реЗрдбрд░ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдХреЗрд╡рд▓ рд╡реЗрдмрд╕реЛрдХреЗрдЯ рдХреЗ рд╕рд╛рде рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИред рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рдЖрдкрдиреЗ рдХрд╣рд╛ рдХрд┐ RFC 6455 "рдЗрд╕рдХрд╛ рд╕рдореНрдорд╛рди рдирд╣реАрдВ" рдХрд░рддрд╛ рд╣реИред
рдпрджрд┐ рдЖрдк рдкреГрд╖реНрда 22/10 рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ
https://tools.ietf.org/html/rfc6455#page -22
- рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ, рдЕрдиреНрдп рд╣реЗрдбрд░ рдлрд╝реАрд▓реНрдб, рдЬреИрд╕реЗ рдХрд┐ рд╡реЗ рднреЗрдЬрддреЗ рдереЗ
рдХреБрдХреАрдЬрд╝ рдпрд╛ рд╕рд░реНрд╡рд░ рд╕реЗ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░реЗрдВред рдЕрдЬреНрдЮрд╛рдд рд╢реАрд░реНрд╖рдХ
[RFC2616] рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЦреЗрддреЛрдВ рдХреА рдЕрдирджреЗрдЦреА рдХреА рдЬрд╛рддреА рд╣реИред
рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдпрд╣ рдЗрд╕рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдореБрдЭреЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдпрд╣ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд▓рдЧрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдпрд╣ ws рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд╕рд╛рде рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рд╣реИ рдХрд┐ engine.io рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
рдХреЛрдИ рд╕рд╣рд╛рд░рд╛? рдзрдиреНрдпрд╡рд╛рдж
https://github.com/socketio/engine.io-client/blob/master/lib/transports/websocket.js#L63
рдКрдкрд░ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рд╕реНрд░реЛрдд рдХреЛрдб рдХреЛ рдкрдврд╝рдХрд░ рдЖрдк рдпрд╣ рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
socketIO('https://example.org', {
path: '/api/endpoint',
transports: ['websocket'],
transportOptions: {
websocket: {
extraHeaders: {
Cookie: 'It works',
},
},
},
});
рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐:
socketIO('https://example.org', {
path: '/api/endpoint',
transports: ['websocket'],
extraHeaders: {
Cookie: 'It works',
},
});
рд╕реНрд░реЛрдд рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯреНрд╕ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреЛрдИ рдкреНрд░рддрд┐рдмрдВрдз рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдЖрдкрдиреЗ рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛? рдореИрдВ рдмрд╛рдж рдореЗрдВ рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВ рдЬрдм рдореЗрд░реЗ рдкрд╛рд╕ рд╕рдордп рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рддреЛ рдкреНрд░рд▓реЗрдЦрди рдХреЛ рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐:
https://socket.io/docs/client-api/#With -extraHeaders:
рдлрд╛рд▓рддреВ рдХреЗ рд╕рд╛рде
рдпрд╣ рддрднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬрдм рдорддрджрд╛рди рдкрд░рд┐рд╡рд╣рди рд╕рдХреНрд╖рдо рд╣реЛ (рдЬреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╣реЛ)ред рдЯреНрд░рд╛рдВрд╕рдкреЛрд░реНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд╡реЗрдмрд╕реИрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдХрд╕реНрдЯрдо рд╣реЗрдбрд░ рдХреЛ рд╕рдВрд▓рдЧреНрди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реЛрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ WebSocket рд╣реИрдВрдбрд╢реЗрдХ рдХрд╕реНрдЯрдо рд╣реЗрдбрд░ рдХрд╛ рд╕рдореНрдорд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред (рдкреГрд╖реНрдарднреВрдорд┐ рдХреЗ рд▓рд┐рдП WebSocket рдкреНрд░реЛрдЯреЛрдХреЙрд▓ RFC рджреЗрдЦреЗрдВ)
const socket = io({ transportOptions: { polling: { extraHeaders: { 'x-clientid': 'abc' } } }});
рдпрд╣ рдЕрдиреНрдпрдерд╛ рдмрддрд╛рддрд╛ рд╣реИ ...
рд╣реЗ рд▓реЛрдЧреЛрдВред
рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛ред
рдореИрдВрдиреЗ рдЗрд╕реЗ рдХреЗрд╡рд▓ рдЕрдкрдиреЗ рдПрдХреАрдХрд░рдг рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рд╣реИ, рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛ред
@najibghadri @behruzz рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдКрдкрд░ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдорддрджрд╛рди рдХреЗ рддрд╣рдд рдЕрддрд┐рд░рд┐рдХреНрдд рдордд рдбрд╛рд▓реЛ
рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬрдм рдиреЛрдбрдВрдЬ рдореЗрдВ рд░рдирдиреАрдВрдЬ, рдХреНрд░реЛрдо рдореЗрдВ рдЪрд▓рдиреЗ рдкрд░ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдЗрд╕ рд░реВрдк рдореЗрдВ рдпрд╣ рдПрдкреАрдЖрдИ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ https://developer.mozilla.org/en-US/docs/Web/API/WebSocket
рдореБрдЭреЗ рд╕реЙрдХреЗрдЯ рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдз рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╡рд┐рддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореЗрд░реЗ рд▓реЛрдб рдмреИрд▓реЗрдВрд╕рд░ рдХреЗ рд▓рд┐рдП рд╣реЗрдбрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдПрдХ рдЕрд▓рдЧ рддрдВрддреНрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА
рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рд▓реЗрдЦрди рдХреЗ рдЕрдиреБрд╕рд╛рд░ рднреА:
рдЕрддрд┐рд░рд┐рдХреНрддрд╣реЗрдбрд░реНрд╕ | {} | рд╣реЗрдбрд░ рдЬреЛ рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрд░реЛрдз рдХреЗ рд▓рд┐рдП рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ (xhr-polling рдФрд░ websockets рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ)ред рдлрд┐рд░ рдЗрди рдореВрд▓реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣реИрдВрдбрд╢реЗрдХ рдХреЗ рджреМрд░рд╛рди рдпрд╛ рд╡рд┐рд╢реЗрд╖ рдкрд░рджреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рд╡реИрд╕реЗ, рдпрджрд┐ рдЖрдк рдХреБрдХреАрдЬрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдХреНрдпрд╛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк рдХреЗрд╡рд▓ рдЪрд┐рдкрдЪрд┐рдкрд╛ рд╕рдВрддреБрд▓рди рдХреЗ рд▓рд┐рдП рдЖрдИрдкреА рдкрддреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?
@AvailCat рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ
@rotvr рдпрджрд┐ рдЖрдк рдХреЗрд╡рд▓ WebSocket рдЯреНрд░рд╛рдВрд╕рдкреЛрд░реНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдЪрд┐рдкрдЪрд┐рдкрд╛ рд╕рддреНрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ WebSocket рдХрдиреЗрдХреНрд╢рди (рдФрд░ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд TCP рдХрдиреЗрдХреНрд╢рди) рдкреВрд░реЗ рд╕рддреНрд░ рдХреЗ рджреМрд░рд╛рди рдЦреБрд▓рд╛ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдпрджрд┐ рдЖрдк рдорддрджрд╛рди рдкрд░рд┐рд╡рд╣рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдкрд╣рд▓реЗ HTTP рдЕрдиреБрд░реЛрдз рдПрдХ рдХреБрдХреА ( io
) рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЪрд┐рдкрдЪрд┐рдкрд╛-рд╕рддреНрд░ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдпрд╣рд╛рдБ: https://socket.io/docs/use-multiple-nodes/
рдЗрд╕реЗ рднреА рджреЗрдЦреЗрдВ: https://github.com/socketio/engine.io-client/issues/635#issuecomment -638713082
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рд╣реЗ рд▓реЛрдЧреЛрдВред
рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛ред
рдореИрдВрдиреЗ рдЗрд╕реЗ рдХреЗрд╡рд▓ рдЕрдкрдиреЗ рдПрдХреАрдХрд░рдг рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рд╣реИ, рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛ред