nodejsニュース紹介のニュース.
nodejsサーバ側では、どのようなメッセージのタイプがtestであればメッセージに戻りますか?
単一プロセスメッセージ機構:現地でappServerを起動するだけで、顧客サービスと接続すればいいです.グループチャットを実現するには、appServerでメッセージを転送すればいいです.チャットは、ユーザーが毎回接続する時、ユーザーのuserIdを使ってkeyとして接続をサーバに保存すればいいです.
マルチプロセスメッセージ構造:
1,単独でサーバーでメッセージサービスを開始します.中間サーバ転送機能として名前を付けます.
2,当地でexpressによってServerをオープンします.名前はappServerです.まずは.appServerは、syncWsServerサービスに接続し、接続を保存します.次にappServerで役に立つなら ユーザ接続は、ユーザのuserIdを用いてkeyとして保存されます.
3,メッセージを送る時は、まず、クライアントがappServerに接続されているかどうかを判断し、接続があれば直接に接続を通じてユーザーに送信する.もしなかったら、メッセージをsyncWsServerに送ります. syncWs Serverを通じてメッセージを一括送信し、接続されたユーザにメッセージを送信する. もし私たちのメッセージServerが複数のプロセスを起動しています.もしaClientがAServerに接続されていたら、bClientが接続されているのはBServerです.もちろんAServerとBServerは同じコードを持つプロセスです.この時、aClientはbClientと通信したいです.aClientがAServerにメッセージを送る必要があります.AServerはサービス端末でbClientの接続が見つからない場合、メッセージをsyncWsServerに送ります.syncWs Serverは受信したメッセージを一括送信します.AServerとBServerはいずれもコードを持って起動するので、デフォルトはsyncWsServerに接続されます.この時点でBServerがメッセージを受信できることを保証します.BServerでメッセージを受信すると、BServerはメッセージ中のuserIdに基づいてbClientの接続を見つけ、正しいメッセージをbClientに送る.
const WebSocket = require('ws');
const wss = new WebSocket.Server({port:3030})
const connection = {}
wss.on('connection',ws => {
ws.on('message',message => {
console.log(JSON.stringify(connection))
message = JSON.parse(message)
if(message.type === 'test') {
connection[message.id] = ws
console.log(connection)
console.log('received: %s',JSON.stringify(message))
if(!!connection[message.id])
connection[message.id].send(JSON.stringify(message))
}else {
ws.clients.forEach(function each(client) {
client.send(message);
});
}
});
})
nodejsのクライアント:const WebSocket = require('ws');
const ws = new WebSocket('ws://127.0.0.1:3030');
ws.on('open',() =>{
let msg = {type:'test',id:1}
ws.send(JSON.stringify(msg));
})
ws.on('error', err => {
console.log(err)
})
ws.on('message',data => {
console.log(data)
})
ws.on('close',(code,reason) => {
console.log(code);
console.log(reason+'=========='+typeof reason)
})
htmlページクライアント:
skynet websocket example
var ws = new WebSocket("ws://127.0.0.1:3030");
ws.onopen = function(){
alert("open");
ws.send("WebSocket hellowrold!!");
};
ws.onmessage = function(ev){
alert(ev.data);
};
ws.onclose = function(ev){
alert("close");
};
ws.onerror = function(ev){
console.log(ev);
alert("error");
};
以上は簡単なメッセージサービス機構です.しかし、nodejsでは、pm 2を使って複数のプロセスを起動することができるということはよく知られています.複数のプロセスが起動した後、メッセージが指定されたカスタマーサービスに正常に送信されるとは保証されません.この問題を解決するために一般的な例を紹介します.単一プロセスメッセージ機構:現地でappServerを起動するだけで、顧客サービスと接続すればいいです.グループチャットを実現するには、appServerでメッセージを転送すればいいです.チャットは、ユーザーが毎回接続する時、ユーザーのuserIdを使ってkeyとして接続をサーバに保存すればいいです.
マルチプロセスメッセージ構造:
1,単独でサーバーでメッセージサービスを開始します.中間サーバ転送機能として名前を付けます.
2,当地でexpressによってServerをオープンします.名前はappServerです.まずは.appServerは、syncWsServerサービスに接続し、接続を保存します.次にappServerで役に立つなら ユーザ接続は、ユーザのuserIdを用いてkeyとして保存されます.
3,メッセージを送る時は、まず、クライアントがappServerに接続されているかどうかを判断し、接続があれば直接に接続を通じてユーザーに送信する.もしなかったら、メッセージをsyncWsServerに送ります. syncWs Serverを通じてメッセージを一括送信し、接続されたユーザにメッセージを送信する. もし私たちのメッセージServerが複数のプロセスを起動しています.もしaClientがAServerに接続されていたら、bClientが接続されているのはBServerです.もちろんAServerとBServerは同じコードを持つプロセスです.この時、aClientはbClientと通信したいです.aClientがAServerにメッセージを送る必要があります.AServerはサービス端末でbClientの接続が見つからない場合、メッセージをsyncWsServerに送ります.syncWs Serverは受信したメッセージを一括送信します.AServerとBServerはいずれもコードを持って起動するので、デフォルトはsyncWsServerに接続されます.この時点でBServerがメッセージを受信できることを保証します.BServerでメッセージを受信すると、BServerはメッセージ中のuserIdに基づいてbClientの接続を見つけ、正しいメッセージをbClientに送る.