CEDEC 2018
どのAdventCalendarにしようか迷った挙句AWSにしてみた。 非常にややこしいタイトルですが、Sails.js(node.js)をElastic BeanstalkのAutoScale環境に載せた上で、WebSocketを使用する方法です。 以前投稿した記事でSails.js(node.jsのフレームワーク)を使用したリアルタイムWebを実現しましたが、今回はそのサービスを公開できる環境を整えます。要件としては、 HTTPSで通信すること AutoScaleの設定をしてELB(ロードバランサ)を設定すること の2点です。基本的にそんなに難しくないのですが、これがWebSocketと相性が悪く、素直にやるとうまくいきません。 1.Beanstalk環境を作成 まずはElastic Beanstalkの環境を作成。特に難しいことはやってないので作ったことのある人はスルー推奨。画像のな
【注意!】この記事はRails 5.0.0.beta1を対象にしています。最新のRails 5では仕様が変わっている可能性もあるので注意してください。 はじめに 先日、Rails 5のAction Cableを使ったシンプルなチャットアプリの作り方をDHH氏がYouTubeで公開していました。 Rails 5: Action Cable demo - YouTube 動画を見ながら僕もコードを写経してみたので、その内容をこちらで紹介してみます。 なお、ここで紹介するのはコードだけで、DHH氏の発言は完全に再現していません。 発言内容を確認したい人はオリジナルの動画をチェックしてみてください。 チャットアプリの完成形 今回は下のような非常にシンプルなチャットアプリを作成します。 ソースコード 今回作ったコードはGitHubにアップしています。 JunichiIto/campfire コードを
WebSocket を利用するアプリケーションは Pub/Sub サーバを使ってスケールアウトさせるのが一般的です。 今回は Redis の Pub/Sub 機能を使って Phoenix の WebSocket をスケールアウトさせてみます。 Phoenix で WebSocket 通信をさせる方法はコチラをご参照ください。 事前知識: WebSocket アプリケーションのスケールアウトについて 通常の Web アプリケーションにおけるスケールアウトは、サーバ台数を増やしてロードバランサでリクエストを分散させる、というのが一般的ですが、WebSocket アプリケーションではこの手法が使えません。 なぜかというと、WebSocket アプリケーションはコネクションをサーバ内で管理するステートフルな作りになっているためです。冗長化させたサーバにリクエストを分散させてしまうと、他サーバで接続
Phoenix には Channel という概念があり、これを JavaScript と組み合わせて使うことでブラウザと WebSocket 通信ができるようになります。 今回は公式ドキュメントを参考に、Channel を使ったサンプルアプリケーションを作ってみます。 チャットだと地味なので、d3.js のこの Example を使って遊んでみようと思います。 Phoenix アプリケーションの作成についてはコチラを参照してください。 サーバサイドを実装する channel_sample という名前でアプリケーションを作ります
経緯 WebSocketを使ったアプリケーションを作ったが、ポートが80しか使えない nginxでどっちも80に流したい ポイント / はまり所 WebSocketのプロキシにはUpgradeヘッダ(HTTP 1.1)への対応が必要 Upgradeヘッダへの対応は nginx v1.3.13以降 参考: WebSocket proxying 厳しい条件から先に書く デフォルトだと30秒通信がないと切断される(!) nginxでリバースプロキシしているときだけ一定時間で接続が切れるので何かと思えば、 普通のHTTPの通信と同様に30秒(だったはず)通信がなかった場合はタイムアウトってことで自動でコネクションを切ってくれていたみたい。 ping/pongを30s以内にやればいいんだろうけど、とりあえず5分に設定。 config server { listen *:80 default_serv
NOTE: 本記事はすでに内容が古く、今読んでも役に立つ度合いはほぼないです。 本記事は、先日社内勉強会のために準備した、Webサービスのリアルタイム通信周りのまとめシリーズ の1つを転載して公開するものです。 まだまだわかっていないことが多いので、ぜひぜひ間違っている点などにご指摘いただければと思い公開します。 ぜひぜひ優しくマサカリをいただけると泣いて喜びます! 目次 目次 はじめに プロトコルと手法 前世代のやり方であるComet について Polling 系 Streaming 系 過渡期といわれてる手法 将来有望といわれてる手法 Polling メリット デメリット 向いているシーン Long Polling (Comet) Polling の発展版 メリット デメリット LongPolling 自体は双方向通信ではない 接続が閉じられるケース 向いているシーン Server S
Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? 今開発しているPlayer!で、チャット系のリアルタイム更新処理が必要となったので、色々調べています。 ※「スマフォアプリ」として共通事項が多いのでそう表記しましたが、基本的にスマフォアプリはiOSアプリとして書いてます。Android・Windows Phoneなどは差異があったり読み替える必要があると思っています。 結論 後半で詳しく書きますが、今のところ以下の結論に至りました。 PUSH通知に全て依存する構成でもそれなりに動く PUSH通知 + 双方向通信処理(WebSocketなど)の併用がベスト 双方向通信処理はPusher・
一般論として、全二重の通信プロトコルを実装するにあたっては、いくつか注意すべき点があって、具体的には、到達確認と切断シーケンスについて定めておかないと、送達されたはずのメッセージがロストしていたり、切断タイミングによってエラーが発生*1したりする。 具体例をあげると、たとえばTCP/IPにおいてshutdown(2)を用いずに、いきなりclose(2)を呼んでいると、read(2)やwrite(2)がエラー(ECONNRESET)を返す場合がある。 翻って、WebSocket (RFC6455)の場合はどうなってるか? だいたい以下のような感じっぽい。 ws.close()が呼び出されるとWebSocketをCLOSING状態に変更し、Closeフレームを送信する ws.onmessageはWebCosketがCLOSING状態にある間も呼ばれるかもしれない*2 相手からCloseフレーム
1. 第6回 - Phoenixだ - GMO Pepabo, Inc. Joe Honzawa 2015/6/25 Elixir勉強会 Elixirだ
経緯 前回slackのライブラリを調べた時にwebソケットライブラリ、rocketsocketが入っていて、面白そうだなと思ったので、早速使ってみようかと。webソケットといえばチャット!チャットアプリを作ってみます。 まずは、そのまんまsocketrocketを見てみたんですが、理解ゼロからチャットやろうとすると、結構大変そうだな...と思い、socket.ioにroomsという機能があるのをみつけました。お、これは使えそうだと調べて行ったら、iOSでもwebViewでsocket.ioのクライアントを書いてくれている人がいました。SIOSocketというやつです。これはいけそうだなということで、やってみました。結果、わりと大変でしたが、なんとか動くものはできたかなーとおもったのでアップしてみます。 できたもの なんかびみょーな仕様ですが... アプリ起動時に自動的に自分のroomに入る
ヤフー株式会社は、2023年10月1日にLINEヤフー株式会社になりました。LINEヤフー株式会社の新しいブログはこちらです。LINEヤフー Tech Blog はじめまして、Yahoo!きっず開発担当です。 昨年Yahoo!きっずにてブラウザオンラインゲーム「おしゃべりリバーシ」をリリースしました。 ※おしゃべりリバーシは2015年10月をもってサービス終了しました。ご利用いただきまして、ありがとうございました。 このゲームは、通信対戦部分の通信プロトコルWebSocketを採用し、サーバミドルウェアにNode.js+Socket.IOを採用しました。この結果、ブラウザゲームでありながらマルチデバイスでの対戦を実現しました。 今回は、Node.js+Socket.IOによるWebSocketサーバのシステム構築方法について考慮すべきポイントを、「おしゃべりリバーシ」の実例を紹介しながら説
2014年04月02日10:57 Ruby Objective-C WebSocket通信を簡単に利用するためのクラウドサービスPusherが便利すぎて泣いた こんにちは!最近は Objective-C を使ってiOSアプリの開発も行っています。ささたつです。 さて、サーバ (Rails) と通信するアプリで、iOS側でいちいち再読み込みしなくても新しい情報が流れてくる、みたいなのがやりたくて Websocket をごにょごにょしていたんです。 まずは Rails 側で Websocket 使うには websocket_rails が良さそうだということでこれを使って実装しました。よしよし動いたと思っていたんですが、iOS側で Websocket を扱おうと思ったら、、あれれ。 iOS側では SocketRocket という square が作ったライブラリを利用しようとしたんです。が、R
JSF + WebSocket で実装した IMAP Web メール・クライアント 2013年12月11日 at 2:55 午前 2件のコメント このエントリは Java EE Advent Calendar 2013 の 11 日目のエントリです。昨日はsk44_ さんの 「JSF で日本語ファイル名のファイルダウンロード?」のご紹介 でした。 明日は @nagaseyasuhito さんです。 エントリを始める前に、昨日 12/10 は Java EE 6/GlassFish v3 が正式リリースされて丁度 4 年目にあたる日でした。2009 年のブログを確認すると 昨日の日本時間の夜 11 時頃からダウンロードできていたようです。 Happy Birth Day 4th Anniversary of Java EE 6 & GlassFish v3 !! 今回私は、JavaServe
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く