openshift을 사용하여 메시징 및 브로드 캐스트 용 노드 websocket을 만들려고합니다. 아래는 제 코드입니다.Node.js는 연결된 모든 클라이언트에게 브로드 캐스트하지 않습니다.
var WebSocketServer = require('ws').Server;
var http = require('http');
var ipaddr = opneshift_ip;
var port = openshift_port;
var server = http.createServer();
var wss = new WebSocketServer({server: server, path: '/connectserv'});
wss.broadcast = function(data) {
for(var i in this.clients) {
console.log(this.clients[i]);
this.clients[i].send(data);
}
};
wss.on('connection', function(ws) {
console.log('a client connected');
ws.on('message', function(data) {
console.log('>>> ' + data);
ws.send('got '+data);
if (data == 'broadcst') {
console.log('broadcst');
wss.broadcast('Hi All');
}
});
ws.on('close', function() {
console.log('Connection closed!');
});
ws.on('error', function(e) {
console.log(e);
});
});
console.log('Listening at IP ' + ipaddr +' on port '+port);
server.listen(port,ipaddr);
클라이언트가 연결되면 콘솔에 "연결된 클라이언트"가 기록됩니다. 어떤 클라이언트가 메시지를 보내면 콘솔은 ">>> message"라고 쓰고 클라이언트도 마찬가지입니다 ("got message")
그러나 여러 클라이언트가 연결되어있는 경우 모든 사람에게 메시지를 브로드 캐스트하려는 경우 연결된 클라이언트, 나는 "broadcst"메시지로 보냅니다. 이상으로갑니다
if (data == 'broadcst') {
console.log('broadcst');
wss.broadcast('Hi All');
}
하지만 메시지를 보내는 클라이언트 만이 메시지를 보냅니다.
메시지를받는 모든 클라이언트를 만드는 방법? 각 클라이언트가 별도의 세션을 생성합니까? redis를 사용하는 방법은 무엇입니까?
빠른 도움말에 감사드립니다.
감사합니다.
보십시오. 모든 클라이언트 주소를 유지하는'wss.on ('connection'...)'외부에있는 목록을 가져야합니다. – sova
내가 항상 목록에 하나만 표시하려고하면. 모든 소켓 연결에 대해 새 세션이 생성됩니다. 어떻게 피하는거야? –
내 프로젝트 haiku.run의 소스 코드를 확인하십시오. https://github.com/sova/haiku.run/blob/master/src/index.js 57에서 clients.push (소켓) 라인을 보면 도움이 될 것입니다. 클라이언트 목록 (클라이언트라고 함)이 있는데, 누군가가 연결할 때마다 clients.push (소켓)를 사용하여 배열에 소켓을 추가합니다. 내 클라이언트 배열은 연결/세션 범위가 아닌 전역 범위에 있습니다. 그게 중요합니다. – sova