これはかなりの質問ですが、現在私はSails APIサーバーとリアクションフロントエンド(スタンドアロン)を持っています。React + Sails + Socket.io
注:フロントエンドを反応させるのは、帆
私はソケットとグリップを取得しようとしているの一部ではないので、私は、私はシンプルなスタートと考えました。
- ユーザーが
- が反応(リアクト)私のウェブサイト訪問ソケットを開き、
- 帆が
- はアップデート時に反応し機能/モデル内のデータをストリーム帆に接続します。私は、次の達成したいです新しいデータがモデルに追加されました
私はこれがExpressとReactを使ってどのように動作するのかを半分理解していますが、SailsがSockets.ioの上にWebSocketのバージョンを実装する方法を頭に考えることはできません。
私が行ったことは、React内にsockets.io-clientをインストールして、Sails内でsails.socketsを使用しようとしています。
これは私が現在持っているものです。
は、コンポーネント NBに反応:私は、これはすべての
componentDidMount =()=> {
this.getSessionData();
UserStore.listen(this.getSessionData);
Socket.emit('/listSessions', function(data){
console.log(data);
})
}
帆機能(listSessions)
listSessions: function(req, res) {
Session.find({ where: {visible: true}, sort: 'createdAt DESC'},
function(err, sessions){
if(req.isSocket){
Session.watch(req.socket);
console.log('User subscribed to ' + req.socket.id);
}
if(err) return res.json(500, {
error: err,
message: 'Something went wrong when finding trades'
});
return res.json(200, {
sessions: sessions,
});
})
},
で正しいとは思いません
セイル機能(createSession)は、上記機能POST/GETを使用して呼ばれる帆機能の
createSession: function(req, res){
var token = jwt.sign({
expiresIn: 30,
}, 'overwatch');
Session.create({
username: req.body.username,
platform: req.body.platform,
lookingFor: req.body.lookingFor,
microphone: req.body.microphone,
gameMode: req.body.gameMode,
comments: req.body.comments,
avatar: null,
level: null,
hash: token,
competitiveRank: null,
region: req.body.region,
visible: true,
}).exec(function(err, created){
Session.publishCreate(created);
if(err) {
console.log(err);
return res.send({
error: err,
message: 'Something went wrong when adding a session',
code: 91
})
}
if(req.isSocket){
Session.watch(req.socket);
console.log('User subscribed to ' + req.socket.id);
}
return res.send({
session: created,
code: 00,
})
});
},
両方でSession.watchと組み合わせて使用するpublishCreateを使用しようとします。 私はこれとどこに行くべきか完全に困惑しています。この作業を行う方法に関する文書や説明は限られています。フロントエンドおよびサーバとしてソケット上のドキュメントは帆の使用に関連すると思われるすべての帆
私はおそらく後で肉付け答えを出すことはできますが、重複が整理見つけるのは簡単を持っています。あなたのクライアントでは 'socket.emit'にコールバック関数を渡しています。これは間違っています。 EMITを実行すると、データ(またはnullなど)が渡されます。あなたがデータを受け取るときは、それをハンドラの 'socket.on( 'someServerEvent'、function(data)... ' – azium
ですが、どうしても私がしようとしていたのは、SailsのlistSession関数のポストを実行することでした。 – K20GH
それはどのように動作するのでしょうか?セイルにはソケットの組み込みが含まれていても、socket.ioサーバーサイドパッケージを追加してイベントを待機し、必要なモデルデータを渡すことはありません。 – azium