Socket.io: 'io' ์ฟ ํ‚ค๋ฅผ ๋ณดํ˜ธํ•˜๋Š” ๋ฐฉ๋ฒ•

์— ๋งŒ๋“  2015๋…„ 10์›” 11์ผ  ยท  23์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: socketio/socket.io

๋‚˜๋Š” socket.io(์ •ํ™•ํ•˜๊ฒŒ๋Š” engine.io)๊ฐ€ ํ˜ธ์ถœ๋œ URL์— 'io'๋ผ๋Š” ๋น„๋ณด์•ˆ ์„ธ์…˜ ์ฟ ํ‚ค๋ฅผ ์„ค์ •ํ•˜๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•„์ฐจ๋ ธ์Šต๋‹ˆ๋‹ค. ์ด ์ฟ ํ‚ค์˜ ์—ญํ• ์€ ๋ฌด์—‡์ด๋ฉฐ ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๋ณด์•ˆ์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? socket.io๊ฐ€ ์‹คํ–‰๋˜๋Š” ๋ชจ๋“  ์œ„์น˜์— ๋Œ€ํ•ด https://๋ฅผ ๊ฐ•์ œ ์‹คํ–‰ํ•˜๊ณ  ์ด ์ฟ ํ‚ค๋ฅผ ๋ณด์•ˆ์œผ๋กœ ์‰ฝ๊ฒŒ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์œ„์น˜๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

์ตœ๊ทผ์— ์ด ์ฟ ํ‚ค์™€ ๊ด€๋ จํ•˜์—ฌ Chrome ์ฝ˜์†”์—์„œ ๊ฒฝ๊ณ ๋ฅผ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค.
(URL)์˜ ๊ต์ฐจ ์‚ฌ์ดํŠธ ๋ฆฌ์†Œ์Šค์™€ ์—ฐ๊ฒฐ๋œ ์ฟ ํ‚ค๊ฐ€ SameSite ์†์„ฑ ์—†์ด ์„ค์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค. Chrome์˜ ํ–ฅํ›„ ๋ฆด๋ฆฌ์Šค๋Š” SameSite=None ๋ฐ Secure ๋กœ ์„ค์ •๋œ ๊ฒฝ์šฐ ๊ต์ฐจ ์‚ฌ์ดํŠธ ์š”์ฒญ์ด ์žˆ๋Š” ์ฟ ํ‚ค๋งŒ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๊ฒ€์ƒ‰ํ•˜์—ฌ ์—ฌ๊ธฐ๊นŒ์ง€ ์˜ค๋Š” ์‚ฌ๋žŒ์—๊ฒŒ ๋„์›€์ด ๋œ๋‹ค๋ฉด ์œ„์™€ ๊ฐ™์ด cookie: false ์˜ต์…˜์„ ์„ค์ •ํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋” ์ด์ƒ ๊ฒฝ๊ณ ๊ฐ€ ํ‘œ์‹œ๋˜์ง€ ์•Š์œผ๋ฉฐ ์ฟ ํ‚ค๋ฅผ ์„ค์ •ํ•˜์ง€ ์•Š์•„๋„ ์•ฑ์ด ์ œ๋Œ€๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋“  23 ๋Œ“๊ธ€

์•„๋ฌด ์šฉ๋„๋กœ ์‚ฌ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์„œ๋ฒ„ ์˜ต์…˜์—์„œ cookie: false ๋ฅผ ์„ค์ •ํ•˜์—ฌ ๋น„ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ตœ๊ณ ์˜ ๋‹ต๋ณ€ - ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

ํ•ด๊ฒฐ๋œ ๋Œ€๋กœ ์ข…๋ฃŒ - ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค

@Nibbler999 ์ด ์˜ต์…˜์€ ์–ด๋””์— ์žˆ์Šต๋‹ˆ๊นŒ? ์ด ์„ค์ •์„ ์ •ํ™•ํžˆ ์–ด๋””์— ๋‘๋‚˜์š”?

@wisniewski94 ์˜ต์…˜์€ ์—ฌ๊ธฐ์— ๋ฌธ์„œํ™”๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค: https://github.com/socketio/engine.io#methods -1

var io = require('socket.io')();
io.on('connection', function(client){});
io.listen(3000, {
  cookie: false
});

@darrachequesne ์ •๋ง ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! ๋‹น์‹ ์˜ ๋„์›€์ด ์—†์—ˆ๋‹ค๋ฉด ๊ทธ๊ฒƒ๋“ค์„ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•˜๋Š”์ง€ ๋‚˜์—๊ฒŒ ์—ฌ์ „ํžˆ ๋ถˆ๋ถ„๋ช…ํ–ˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. README.md์— ์˜ˆ์ œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

๋” ๋„“์€ ์˜๋ฏธ์—์„œ ํ•ด๋‹น ์ฟ ํ‚ค๋Š” ์–ด๋””์—๋„ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ์ œ๊ฑฐ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์•ˆ๋…•ํ•˜์„ธ์š” @darrachequesne ,

์—ฌ๊ธฐ ๋‚ด ํ˜„์žฌ ์ฝ”๋“œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

var server = http.createServer(app);
var socket = require('socket.io');
var io = socket().listen(server,
    {
        cookie: false
    });

๊ทธ๋Ÿฌ๋‚˜ ์„œ๋ฒ„๋Š” ์—ฌ์ „ํžˆ io ์ฟ ํ‚ค๋ฅผ ๋ณด๋ƒ…๋‹ˆ๋‹ค.
io์™€ ์ต์Šคํ”„๋ ˆ์Šค ์„œ๋ฒ„ ์—ฐ๋™์‹œ ์ฟ ํ‚ค ๋ฌธ์ œ๋Š” ์—†๋‚˜์š”?

๊ฐ์‚ฌ ํ•ด์š”.

ํ•œ ๊ฐ€์ง€ ๋”, ์›น ์†Œ์ผ“ ์š”์ฒญ( 101 Switching Protocols ์‘๋‹ต)์— ๋Œ€ํ•ด Access-Control-Allow-Origin ํ—ค๋”๋ฅผ ๋ณด๋‚ด๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ?
์ดˆ๊ธฐํ™” ๋‹จ๊ณ„์—์„œ io.origins(config.origin) ๋ฅผ ์„ค์ •ํ–ˆ์ง€๋งŒ XHR ์š”์ฒญ์—๋งŒ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

๋ฐฐ๊ฒฝ์€ Origin ํ—ค๋”๋ฅผ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์„ค์ •ํ•˜์ง€ ์•Š์€ ๊ฒƒ์ด ์ทจ์•ฝํ•œ ์š”์ฒญ์ด๋ผ๋Š” ์š”์ฒญ์ด ์žˆ๋Š” ๊ฒฝ์šฐ์ธ๋ฐ, ๋งž๋‚˜์š”?

@tienlx93 ์žฌํ˜„ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค: https://github.com/darrachequesne/socket.io-fiddle/tree/issues-2276

๋ฐฐ๊ฒฝ์€ Origin ํ—ค๋”๋ฅผ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์„ค์ •ํ•˜์ง€ ์•Š์€ ๊ฒƒ์ด ์ทจ์•ฝํ•œ ์š”์ฒญ์ด๋ผ๋Š” ์š”์ฒญ์ด ์žˆ๋Š” ๊ฒฝ์šฐ์ธ๋ฐ, ๋งž๋‚˜์š”?

Access-Control-Allow-Origin ํ—ค๋”๋Š” ๋„๋ฉ”์ธ ๊ฐ„ ์š”์ฒญ( MDN )์—๋งŒ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. io.origins() ํ—ˆ์šฉ๋œ ์ถœ์ฒ˜๋ฅผ ์„ค์ •ํ–ˆ๋‹ค๋ฉด ๊ดœ์ฐฎ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ •๋ณด์— ๋Œ€ํ•ด์„œ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ์ฐธ๊ณ ๋กœ express๋ฅผ ์„œ๋ฒ„๋กœ ์‚ฌ์šฉํ•  ๋•Œ ์ด ์ฟ ํ‚ค๋ฅผ false๋กœ ์„ค์ •ํ•˜๋Š” ๋˜ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

var server = require('http').createServer(express());
var io = require('socket.io')(server, { path:"/some/path", cookie: false });

@darrachequesne socket.io-2.0์—์„œ ์ด ์ฟ ํ‚ค๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ์„ค์ •ํ•˜๊ณ  ์ฟผ๋ฆฌ ๋ฌธ์ž์—ด์—์„œ ์ œ๊ฑฐํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ?

@darrachequesne socket.io-2.0์—์„œ ์ด ์ฟ ํ‚ค๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ์„ค์ •ํ•˜๊ณ  ์ฟผ๋ฆฌ ๋ฌธ์ž์—ด์—์„œ ์ œ๊ฑฐํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ?

socket.io^2.0์—์„œ ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๊ฒŒ์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์ตœ๊ทผ์— ์ด ์ฟ ํ‚ค์™€ ๊ด€๋ จํ•˜์—ฌ Chrome ์ฝ˜์†”์—์„œ ๊ฒฝ๊ณ ๋ฅผ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค.
(URL)์˜ ๊ต์ฐจ ์‚ฌ์ดํŠธ ๋ฆฌ์†Œ์Šค์™€ ์—ฐ๊ฒฐ๋œ ์ฟ ํ‚ค๊ฐ€ SameSite ์†์„ฑ ์—†์ด ์„ค์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค. Chrome์˜ ํ–ฅํ›„ ๋ฆด๋ฆฌ์Šค๋Š” SameSite=None ๋ฐ Secure ๋กœ ์„ค์ •๋œ ๊ฒฝ์šฐ ๊ต์ฐจ ์‚ฌ์ดํŠธ ์š”์ฒญ์ด ์žˆ๋Š” ์ฟ ํ‚ค๋งŒ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๊ฒ€์ƒ‰ํ•˜์—ฌ ์—ฌ๊ธฐ๊นŒ์ง€ ์˜ค๋Š” ์‚ฌ๋žŒ์—๊ฒŒ ๋„์›€์ด ๋œ๋‹ค๋ฉด ์œ„์™€ ๊ฐ™์ด cookie: false ์˜ต์…˜์„ ์„ค์ •ํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋” ์ด์ƒ ๊ฒฝ๊ณ ๊ฐ€ ํ‘œ์‹œ๋˜์ง€ ์•Š์œผ๋ฉฐ ์ฟ ํ‚ค๋ฅผ ์„ค์ •ํ•˜์ง€ ์•Š์•„๋„ ์•ฑ์ด ์ œ๋Œ€๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

์ตœ๊ทผ์— ์ด ์ฟ ํ‚ค์™€ ๊ด€๋ จํ•˜์—ฌ Chrome ์ฝ˜์†”์—์„œ ๊ฒฝ๊ณ ๋ฅผ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค.
(URL)์˜ ๊ต์ฐจ ์‚ฌ์ดํŠธ ๋ฆฌ์†Œ์Šค์™€ ์—ฐ๊ฒฐ๋œ ์ฟ ํ‚ค๊ฐ€ SameSite ์†์„ฑ ์—†์ด ์„ค์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค. Chrome์˜ ํ–ฅํ›„ ๋ฆด๋ฆฌ์Šค๋Š” SameSite=None ๋ฐ Secure ๋กœ ์„ค์ •๋œ ๊ฒฝ์šฐ ๊ต์ฐจ ์‚ฌ์ดํŠธ ์š”์ฒญ์ด ์žˆ๋Š” ์ฟ ํ‚ค๋งŒ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๊ฒ€์ƒ‰ํ•˜์—ฌ ์—ฌ๊ธฐ๊นŒ์ง€ ์˜ค๋Š” ์‚ฌ๋žŒ์—๊ฒŒ ๋„์›€์ด ๋œ๋‹ค๋ฉด ์œ„์™€ ๊ฐ™์ด cookie: false ์˜ต์…˜์„ ์„ค์ •ํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋” ์ด์ƒ ๊ฒฝ๊ณ ๊ฐ€ ํ‘œ์‹œ๋˜์ง€ ์•Š์œผ๋ฉฐ ์ฟ ํ‚ค๋ฅผ ์„ค์ •ํ•˜์ง€ ์•Š์•„๋„ ์•ฑ์ด ์ œ๋Œ€๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๊ฒƒ์€ ๋‚˜๋ฅผ ์œ„ํ•ด ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋‚ด ์ฝ”๋“œ:

http.listen(port, {cookie: false}, function(){
  console.log('listening on *:' + port);
});

๋ญ๊ฐ€ ์ž˜๋ชป ๋˜์—ˆ ๋‹ˆ?

@GuilhermeCouto , http.listen์ด ์•„๋‹Œ _socket_์„ ์ดˆ๊ธฐํ™”ํ•  ๋•Œ {cookie: false} ์˜ต์…˜์„ ์„ค์ •ํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋ฅผ ์œ„ํ•ด ์ผํ•œ ์œ„์— ์ œ๊ณต๋œ ์†”๋ฃจ์…˜์€ express๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์†”๋ฃจ์…˜์ž…๋‹ˆ๋‹ค.

var server = require('http').createServer(express());
var io = require('socket.io')(server, { path:"/some/path", cookie: false });

๋„์›€์ด ๋˜์—ˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค

@GuilhermeCouto , http.listen์ด ์•„๋‹Œ _socket_์„ ์ดˆ๊ธฐํ™”ํ•  ๋•Œ {cookie: false} ์˜ต์…˜์„ ์„ค์ •ํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋ฅผ ์œ„ํ•ด ์ผํ•œ ์œ„์— ์ œ๊ณต๋œ ์†”๋ฃจ์…˜์€ express๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์†”๋ฃจ์…˜์ž…๋‹ˆ๋‹ค.

var server = require('http').createServer(express());
var io = require('socket.io')(server, { path:"/some/path", cookie: false });

๋„์›€์ด ๋˜์—ˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค

Doug๋‹˜ ๋‹ต๋ณ€ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.
์งˆ๋ฌธ ํ•˜๋‚˜๋งŒ ๋” ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?
๊ฒฝ๋กœ์— ๋ฌด์—‡์„ ์ž…๋ ฅํ•ฉ๋‹ˆ๊นŒ?
๋‚ด ์‹œ์Šคํ…œ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ PC๊ฐ€ ๋กœ์ปฌ ์„œ๋ฒ„์— ์—ฐ๊ฒฐํ•˜๋Š” ๋กœ์ปฌ ๋„คํŠธ์›Œํฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
๋‚ด๋ถ€ IP๋Š” ๊ณ ๊ฐ๋งˆ๋‹ค ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

๋‚ด ์ฝ”๋“œ:

var app = require("express")();
var http = require("http").Server(app);
var io = require("socket.io")(http);
var port = process.env.PORT || 3000;

// maps socket.id to user"s nickname
var nicknames = {};
// list of socket ids
var clients = [];
var namesUsed = [];

app.get("/", function(req, res){
  res.sendFile(__dirname + "/index.html");
});

io.on("connection", function(socket){  
    handleNewUser(socket);  
    handleTV(socket);
    //showActiveUsers(socket);
    handleClientDisconnections(socket);
    handleMessageBroadcasting(socket);
    handlePrivateMessaging(socket);
});

http.listen(port, function(){
  console.log("listening on *:" + port);
});

function handleTV(socket) {
    socket.on("flugo message", function(msg){
        console.log("flugo message"); 
       io.emit("flugo message", msg);
    });
}

function handleNewUser(socket){
  socket.on("user join", function(atendente) { 
  console.log("user join");   
  if (atendente) {      
        var ind = namesUsed.indexOf(atendente.nome);
        if (ind !== -1) {
          //ja tem alguem com esse nome, pode ser a mesma conexao da mesma pessoa
          clients[ind] = socket;
          nicknames[socket.id] = atendente;
        }else
        {
            ind = namesUsed.push(atendente.nome) - 1;
            clients[ind] = socket;
            nicknames[socket.id] = atendente;
        }

        //io.sockets.emit("new user", {id: ind, from: from});
        showActiveUsers(socket);
    }
  });
}

function handleMessageBroadcasting(socket){
  socket.on("message", function(msg,callback){
    console.log("message"); 
    if(nicknames[socket.id])
    {
        var from = nicknames[socket.id].nome;
        var user_id = nicknames[socket.id].id;
        var now = new Date();
        io.sockets.emit("message", {id: user_id, from: from, date: now.getTime(), msg: msg}); 
        callback("message");   
    }
  });
}

function handlePrivateMessaging(socket){
  socket.on("private message", function(data, callback){
    console.log("private message"); 
    if(nicknames[socket.id])
    {
        var from = nicknames[socket.id].nome;  
        var user_id = nicknames[socket.id].id;   
        var ind = namesUsed.indexOf(data.userToPM);
        if (ind !== -1) {
            var now = new Date();
            clients[ind].emit("private message", {id: user_id, from: from, date: now.getTime(), msg: data.msg}, function(data2, callback2){
                callback("private message");
            });         
        } 
    }   
  });
}

function handleClientDisconnections(socket){
  socket.on("disconnect", function(){
    console.log("disconnect"); 
    if(nicknames[socket.id])
    {
        var ind = namesUsed.indexOf(nicknames[socket.id].nome);
        var at = nicknames[socket.id];
        delete namesUsed[ind];
        delete clients[ind];
        delete nicknames[socket.id];
        io.sockets.emit("user disconnect", at);
    }
  });
}

function showActiveUsers(socket){
  var activeNames = [];
  var usersInRoom = io.sockets.sockets;
  console.log("names"); 
  //if(usersInRoom!===undefined){
    for (var index in usersInRoom){
        var userSocketId = usersInRoom[index].id;
        if (nicknames[userSocketId]){
          var name = nicknames[userSocketId].nome;
          activeNames.push({id: namesUsed.indexOf(name), from: name});
        }
      }
      io.sockets.emit("names", activeNames);
 // }

}

๊ทธ ์Šค ๋‹ˆํŽซ์€ ์œ„์˜ Ikende์˜ ๋‹ต๋ณ€์—์„œ ๊ฐ€์ ธ์˜จ ๊ฒƒ์ด๋ฏ€๋กœ path ์˜ต์…˜์ด ๋ฌด์—‡์„ ๋งํ•˜๋Š”์ง€ ์™„์ „ํžˆ ํ™•์‹คํ•˜์ง€ ์•Š์ง€๋งŒ ์ง€์ •ํ•  ํ•„์š”๋Š” ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋„์›€์ด ๋œ๋‹ค๋ฉด ์—ฌ๊ธฐ ๋‚ด ์ฝ”๋“œ์˜ ๊ด€๋ จ ์Šค๋‹ˆํŽซ์ด ์žˆ์Šต๋‹ˆ๋‹ค(์ €๋Š” typescript๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค).

import * as express from 'express';
import { createServer, Server } from 'http';
import * as socketIo from 'socket.io';

this.app = express();
this.server = createServer(this.app);
this.io = socketIo(this.server, { cookie: false });
this.server.listen(this.port, () => {
            this.log('Running server on port ' + this.port);
        });
this.io.on('connect', (socket: SocketIO.Socket) => { bunch of code here }

, { ์ฟ ํ‚ค: ๊ฑฐ์ง“ }

์ž‘๋™ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. =/

์–ด๋–ค ๋ฒ„์ „์˜ socket.io๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?

2.2.0. ๋‚ด ๊ธฐ์–ต์ด ํ๋ฆฟํ•˜์ง€๋งŒ ์ˆ˜์ • ์‚ฌํ•ญ์„ ํ™•์ธํ•˜๋ ค๋ฉด Chrome์„ ์ข…๋ฃŒํ•˜๊ณ  ์ƒˆ ์ธ์Šคํ„ด์Šค๋ฅผ ์‹œ์ž‘ํ•˜๊ฑฐ๋‚˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํŽ˜์ด์ง€์˜ Chrome ๊ฐœ๋ฐœ์ž ๋„๊ตฌ๋ฅผ ํ†ตํ•ด ์ฟ ํ‚ค๋ฅผ ์ˆ˜๋™์œผ๋กœ ์ œ๊ฑฐํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ํŽธ์ง‘ : ์•„๋งˆ๋„ ์„œ๋ฒ„ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ์ข…๋ฃŒํ•˜๊ณ  ๋‹ค์‹œ ์‹œ์ž‘ํ•ด์•ผํ–ˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋ฐ๋„ ์กด์žฌํ•˜๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

io.attach ๋ฐฉ๋ฒ•์œผ๋กœ http ๋ฐ https ์„œ๋ฒ„๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž‘๋™ํ–ˆ์Šต๋‹ˆ๋‹ค.

io.attach(httpServer, {cookie: false});
io.attach(httpsServer, {cookie: false});

์—ฌ๊ธฐ์—์„œ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด ๋งํ•˜๋Š” ๊ฒƒ๊ณผ๋Š” ๋Œ€์กฐ์ ์œผ๋กœ ์ด ์ฟ ํ‚ค๋Š” ์—ฌ๊ธฐ Haproxy ์˜ต์…˜์—์„œ ์„ค๋ช…๋œ ๊ฒƒ์ฒ˜๋Ÿผ socket.io ์„œ๋ฒ„์˜ ์—ฌ๋Ÿฌ ๋™์‹œ ์ธ์Šคํ„ด์Šค๊ฐ€ ์žˆ๋Š” ์‹œ์Šคํ…œ์—์„œ ๊ณ ์ •์„ฑ์„ ์ œ๊ณตํ•˜๋Š” ๋ฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. https://socket.io/docs/using- ๋‹ค์ค‘ ๋…ธ๋“œ.

๊ทธ๋Ÿฌ๋‚˜ ์ฟ ํ‚ค์— sameSite๋ฅผ ์„ค์ •ํ•˜๋Š” ์˜ต์…˜์ด ์—†์œผ๋ฏ€๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰