質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

1回答

2199閲覧

railsからnodeサーバにemitする方法

ricy

総合スコア48

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

1クリップ

投稿2017/01/05 22:44

railsのAPI用途でJSONを返す処理があり、
JSONを返す前に、DBに保存された内容をnodeサーバにemitしたいのですが、
なにかいい方法はないでしょうか。

Rails

def create @item = Item.new(item_params) # nodeサーバにconnectして、@item.to_jsonをemitしたい end

Nodeサーバ

var io = require('socket.io').listen(3000); io.sockets.on('connection', function(socket){ socket.on('chat', function(data){ console.log(data); socket.emit('chat', data); // echo }); });

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

よく行われる手段として、

  1. Redisサーバを立ち上げる
  2. Node.jsのSocket.ioサーバにsocket.io-redisを入れて、Redis経由でemitできるようにする
  3. Ruby側にsocket.io-ruby-emitterを入れる

という手法があります。

投稿2017/01/06 00:17

編集2017/01/06 00:17
maisumakun

総合スコア145184

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ricy

2017/01/06 08:41 編集

ご回答ありがとうございます。 いただいた方針で一度実装してみましたが、emitされず、 申し訳ないですが、調べ方等アドバイスいただければ幸いです。 rails emitter = SocketIO::Emitter.new(redis: Redis.new(:host => '127.0.0.1', :port => 6379)) response = emitter.emit("chat", item.to_json) node var cfg = require("config"); var company = process.env.COMPANY || "arrange" var express = require('express'); var app = express(); var server = require('http').createServer(app); var io = require('socket.io').listen(server); var redis = require("socket.io-redis"); io.adapter(redis({host: '127.0.0.1', port: 6379})) server.listen(5001); io.sockets.on('connection', function(socket) { console.log("connect") socket.on("chat", function(messages){ console.log("emit") console.log(messages) io.sockets.emit("chat", messages) }); socket.on('disconnect', function () { console.log("user disconnected"); }); }); この対応で、 console.log("connect") console.log("emit") この2つがnodeのコンソールログ上にでてきません。
maisumakun

2017/01/06 09:12

ちょっと読み違いとか勘違いがありましたが、この方法を使うと、RailsからSocket.ioの「クライアントに」直接emitできるようになります。サーバ側を制御したいときは、別な手段が必要となります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問