ikeike443のブログ

ソフトウェアビジネスに関心がある系のブログ

socket.io-clientがnode.jsから呼び出せるようになってた

下記のコミットで出来るようになってる。
https://github.com/LearnBoost/socket.io-client/pull/274


バージョン的には0.7.5から。
今なら下記のようにnpmからインストールすれば使えるようになってる。

$ npm install socket.io-client


ちなみにsocket.ioっていうのは、websocketおよびそれっぽい何かを使って、プッシュ通信をクロスブラウザで実現しようというライブラリ。ステキやん。
http://socket.io/

準備

インストールしたら、まずサーバサイドを下記のように書く(要express/ejs)。
このコードはどなたかのブログを参考にさせていただいたものです。(すいません。どなたのものだったか忘れました。。)

hello.js
var express = require('express');
var app = express.createServer();
app.get('/', function(req, res) {
	res.render('index.ejs', {
		layout : false,
		locals : {
			name : req.param('name') || 'anonymous'
		}
	});
});
app.listen(3000);
console.log('Server running at http://127.0.0.1:3000/');
var io = require('socket.io').listen(app);
io.sockets.on('connection', function(client) {
	client.on('message', function(msg) {
		client.send(msg);
		client.broadcast.emit('message', msg);
	});
});
views/index.ejs
<html>
  <head>
    <title>hello node.js!</title>
  </head>
  <body>
    I'm <span id="name"><%= name %></span>.<br />
    <form onsubmit="return send();">
      <input type="text" name="message" id="message"/>
      <input type="submit" />
    </form>
    <script type="text/javascript" src="/socket.io/socket.io.js"></script>
    <script type="text/javascript">
      var socket = io.connect();
      socket.on('message', function(msg) {
        var div = document.createElement('div');
        div.appendChild(document.createTextNode(msg));
        document.body.appendChild(div);
      });
      function send() {
        var message = document.getElementById('message');
        socket.send(document.getElementById('name').innerText + ': ' + message.value);
        message.value = '';
        return false;
      }
    </script>
  </body>
</html>


上記までだと、node.jsをサーバとして使い、クライアントはHTMLのscriptタグ中のJavascriptとなる。
これに加えて、今回のバージョンアップで、クライアントをnode.jsで書くことが出来るようになった。


例えば下記のように書けばいい。

nodeclient.js
var client = require('socket.io-client');
var socket = client.connect('http://localhost:3000');
socket.on('connect',function(){
    console.log('yea!!');
    socket.send('how are you?');
    socket.disconnect();
    process.exit(0);
});

試し方

まずサーバを起動するため、下記コマンド。

$ node hello.js


サーバが起動して普通のチャットアプリとして動くことを確認したら、次におもむろに下記コマンドを実行。

$ node nodeclient.js


すると、ブラウザ側にメッセージがプッシュされる。
これって要はクライアントからの入力がなくても、サーバサイドからブラウザに向けてプッシュでメッセージを送れるってことですよね。


下記にデモ動画をアップしてみた。

http://f.hatena.ne.jp/ikeike443/20110809011059

結構夢が広がると思います。

第一回 Playframework 勉強会 in 関西に行ってきたよ!

去る8月6日土曜日、大阪の株式会社クロノスさんのセミナールームにて、第一回Playframework勉強会in関西が開催されました!
http://atnd.org/events/17724

つーわけで行ってきた!
業務でPlayframeworkを使う中で(・∀・)イイネ!!と感じたことをだらだらとしゃべってきた!
まとまってなくてごめんなさい!! スライドはこれです!


他の参加者の方々のスライドは下記です。


@daiksyさんによるPlay! on GAEのチュートリアル。
@daiskyさんのスライドとプレゼンテーションはとっても分かりやすくて、とても勉強になりました。



@tan_go238さんによるNettyとノンブロッキングI/O周りの話。
Play!は1.1から内部でNettyを使ってるんですよね。
NettyからGrowlに通知をするサンプルアプリなんかもデモしてくれて、とても充実した内容でした。


また、@s_kozakeさんによるPlayframeworkガイダンスもとてもわかり易くて、初めてPlayframeworkに触れる人にとってとてもいい内容でした。スライドアップ待ってます!
@s_kozakeさんは、Playframeworkのこのムービーの内容を暗記しているみたいで、ムービーに合わせて内容説明をするということをやってくれてました。
あれとっても分かりやすくてよかったです。


発表が終わった後、2時間くらいのフリータイムがあって、各々初めてのPlayframeworkアプリ作成にトライしました。
また、気が向いた人がLTをやる、みたいな感じで進みました。


LTの白眉は@kiy0takaさんによる初めてのPlayframeworkアプリBy Groovyでした。
ViewテンプレートにGroovyを使っていて、素のGroovyをゴリゴリ書けることを聞いた@kiy0takaさん。
ViewのなかでGroovy consoleを起動して、その中からモデルに触ってデータ更新するというアプリ(?)を作ってくれました。
Groovyで何かネタを出来ないかといつも狙っている感のある@kiy0takaさんならではですね。

コードは下記です。


最後は懇親会で酒を飲みました。
当日のTogetterまとめは下記です!
http://togetter.com/li/171094


というわけで、第一回Playframework勉強会in関西、とっても楽しかったです。


次回の開催は、私の方で主催して、東京でやろうと思ってます。
いつ頃がいいですかね?


参加したい、発表してもイイ、LTならなんかしゃべってもイイ、っていう人は、是非Twitterなどでお知らせください

The First Play! meetup in Japan

The Play! meetup in Japan was held at Kronos co., LTD's seminar room on 6 Aug. 2011.
It might be the first time about play meetup in Japan.


I went to this meetup and talked about play good points I felt while using for work.
My slide is this:


I hope it was help and great info for those who bored about Java EE and Servlet programming.
Play! is fun. Java programming is also fun fundamentaly. I think.



Other people's slide are also here:


This slide is gae and siena module tutorial for Play! beginners presented by @daiksy.
Many of audience were interested about this slide and easiness for getting started with Play! on GAE.




This slide mentioned about Netty and NIO in Play! presented by @tan_go238.
@tan_go238 demonstrated a little NIO server that notify onto growl developed with Netty.



After the all presentations finished, it was free time that audience tried to use Play! and talked about the first impression about Play!.
At this free time, @kiy0taka, groovy hacker, demonstrated his first Play! app mostly written by groovy.
It was very funny. At first, this app started up groovy console in Play! view html, and then touch a model instance and do save() on groovy console.
It was joke app! but we loved it and his improvised idea. ;-p
His code is below:



This meetup was very very fun!
The next Play! meetup is coming soon!
I planned the next in Tokyo.

Keep in touched! :-)