Pomelo-完全なチャットサービスの構築と出会う穴
5842 ワード
前に書いてください.チャットサービスの開発に関する問題について、皆さんと交流して討論してください.
本文を読む前に、pomeloの基本知識を知る必要があります.参考できます. Pomelo構築(一) Pomelo構築(二) 一.身分証明書の追加(JWT Token)
ここでは、 が接続されています. headerがbase 64を経て生成された文字列は、 と記載されている. payloadがbase 64を経て生成された文字列は、 と記載されています. signatureは、 と記載されている.
JWT Token=header Str+'''+payloadStr+''+sigStr Filterの追加は、各要求に対するアイデンティティ検証を可能にするために、各要求におけるFilterのtokenを追加して検証する.pomeloではどのようにfilterを追加するかを説明します.pomeloの開発文書では、汚い言葉に置き換えられたfilterの小さい例を紹介しています.ここではこの小さい例を簡単に紹介し、分析します.まずfilterを作成します.
pomeloは、インストールlogs 4 js-----npm install logs 4 js log 4 jsを構成し、log 4 js.jsファイルを新規作成する .
三.関連部署と発生した問題
運転環境:AWSクラウドサーバ(EC 2)
ステップ:1.構築環境:node(nvmを使用してインストールすることを推奨する)のインストール、pythonのインストール、pomeloのインストール(npm install pomelo-g)2.コードの引き出し:git clonehttps://github.com/NetEase/chatofpomelo.git (chatofpomeloを例にして)3.プロジェクトディレクトリのnpm-innstall.shスクリプトのインストールに関する依存性
問題:1.起動後のアクセスエラー
2.Hostアドレスの設定(pomeloのクラスタ構成はまだ使用されていないので、hostは同じIP)は
以上はpomeloに対して使ういくつか記録で、もし何か間違ったところがあれば、ご指摘を歓迎します.皆さんと一緒に学習を交流し、共に進歩したいです.
本文を読む前に、pomeloの基本知識を知る必要があります.参考できます.
: Web ,
ここでは、
JWTToken
を用いて簡単に説明する.ユーザはログイン後にサーバから返されたtoken
を取得し(
と理解できる)、次の要求時にこのトークンを持参してアイデンティティ検証を行い、検証に成功して初めてアクセスできる.また、token
には期限が切れています.一定時間以内で有効です.期限を過ぎたら、再度ログインしてください.JWTToken
を知らない人はここに来てみてもいいです.JWT Token概要. : pomelo websocket , http ( ), route , token , , 。
JWTToken
は、頭部(header
)、負荷(payload
)、ビザ(signature
)の3つの部分に分けられている.(1)ヘッダ(header):2つの部分の情報を含み、a. (jwt) b.
(通常は直接にHmacSHA 256を使用する).例えば:{‘type’:‘JWT’,‘alg’:‘HS 256’(2)負荷:有効な情報を保存するところ、ユーザー名など(3)ビザ(signature):3つの部分から構成され、各部分の間に" . "
でheaderStr
payloadStr
headerStr + '.' + payloadStr
がheaderによって宣言した暗号化方式でsecretを組み合わせて暗号化した文字列で、sigStr
JWT Token=header Str+'''+payloadStr+''+sigStr
:JWTtoken JSON
Filter.js(game-server/app/servers/chat/filter/)
module.exports = function(){
return new Filter();
}
var Filter = function(){};
// filter,
Filter.prototype.before = function(msg, session, next){
// :content ,token token
var content = msg.content;
var token = msg.token;
// token , token
if(validate(token)){
// , content ,
msg.content = content.replace('fuck', '****');
// next() filter , handler
next();
}
// token , msg , :
msg.code = 500;
msg.errorMsg = 'token token ';
next();
}
// filter,
Filter.prototype.before = function(msg, session, next){
// , ...
}
filterを作成したら、ap.jsにFilter.jsを導入し、以下のように構成します.var pomelo = require('pomelo');
var routeUtil = require('./app/util/routeUtil');
/**
* Init app for client.
*/
var app = pomelo.createApp();
app.set('name', 'chatofpomelo');
// connector
app.configure('production|development', 'connector', function(){
app.set('connectorConfig',
{
connector : pomelo.connectors.hybridconnector,
heartbeat : 3,
useDict : true,
useProtobuf : true,
closeTimeout : 60 * 1000,
});
});
// gate
app.configure('production|development', 'gate', function(){
app.set('connectorConfig',
{
connector : pomelo.connectors.hybridconnector,
useProtobuf : true,
closeTimeout : 60 * 1000,
});
});
// Filter.js
var Filter = require('./app/servers/chat/filter/Filter');
// app configure,
app.configure('production|development', function() {
// route configures
app.route('chat', routeUtil.chat);
// Filter,before ,after
app.before(Filter);
});
// start app
app.start();
process.on('uncaughtException', function(err) {
console.error(' Caught exception: ' + err.stack);
});
: filter , , chat/handler , 。( filter , , )
二.ログ記録pomeloは、
log4js
をカプセル化することにより、pomelo-logger
というコンポーネントを形成しているので、ログ記録を使用する際には、このコンポーネントを導入する必要がある.ロゴ4 jsの処理をよりよく理解するために、ここで直接的にロゴ4 jsを使用して紹介します.// log4js
var log4js = require('log4js');
//
log4js.configure({
appenders: {
console: {
type: "console"
},
dateFile: {
type: "dateFile",
// , logs
filename: "logs/LogFile",
pattern: "-yyyy-MM-dd.log",
category: "log_date",
encoding: 'utf-8',
alwaysIncludePattern: true
}
},
categories: {
dateFile: {
appenders: ['dateFile'], level: 'error'
},
default: {
appenders: ['console', 'dateFile'], level: 'all'
}
}
});
var dateFile = log4js.getLogger('log_date')
module.exports = dateFile
使用時には、var log = require(‘ log4js.js ’);
などを通じて、異なるレベルのログ情報を入力することができます.ロゴ4 jsの詳細については、ロゴ4 jsとAPIを参照してください.三.関連部署と発生した問題
運転環境:AWSクラウドサーバ(EC 2)
ステップ:1.構築環境:node(nvmを使用してインストールすることを推奨する)のインストール、pythonのインストール、pomeloのインストール(npm install pomelo-g)2.コードの引き出し:git clonehttps://github.com/NetEase/chatofpomelo.git (chatofpomeloを例にして)3.プロジェクトディレクトリのnpm-innstall.shスクリプトのインストールに関する依存性
log.error();log.info();log.warn()
.pomelo start-e production-D実行サービス(-eは選択環境、-Dはバックグラウンド動作を表します.)問題:1.起動後のアクセスエラー
: , (sudo chown -R filePath)
解決:nodeバージョンが高すぎて、低いバージョンを選択して再インストールしてから、ステップ3から開始します.2.Hostアドレスの設定(pomeloのクラスタ構成はまだ使用されていないので、hostは同じIP)は
ParserIncomingMessage is not a constructor.
の下の : node v6.11.2, node v10.x.x
およびgame-server/config
の中で、master.json
を対応サーバのservers.json
に変更する.以上はpomeloに対して使ういくつか記録で、もし何か間違ったところがあれば、ご指摘を歓迎します.皆さんと一緒に学習を交流し、共に進歩したいです.