モーグルとカバとパウダーの日記

モーグルやカバ(EXカービング)山スキー(BC)などがメインの日記でした。今は仕事のコンピュータ系のネタが主になっています。以前はスパム対策関連が多かったのですが最近はディープラーニング関連が多めです。

nodeでsocket.ioのv0.8.0だと日本語(UTF-8)が通らない(解決済み)

(追記 2011/9/30)

久しぶりにアップデートして試してみたところ、現行のv0.8.4版ではこの問題は解決されていました。

(/追記)


今朝、nodeのweb socketライブラリ、socket.ioの新しいバージョンv0.8がリリースされました。


僕は今までsocket.io 0.6.3で使っていて、0.6→0.7は使い方やメソッドが変更されているため、移行するにはプログラムの修正が必要なので、0.7に移行しなくちゃと思いつつなかなか移行できませんでした。
でも、今やらないと後からだと大変になると思って、今日思い切って移行したら、運悪くちょうど0.8になっていたのでした。


で、頑張って修正してたんですが、テストプログラムでは通信うまくいくのに、実際のアプリケーションのほうだとうまく動かず、ちょっと苦労していました。
それでいろいろ調べていくと、どうもv0.8は日本語(UTF-8)のデータ送信に失敗するような感じです。


Socket.IO: the cross-browser WebSocket for realtime apps.
http://socket.io/#how-to-use


のサンプルをほとんどそのまま使った検証用アプリを書きました。
…って単にメッセージ送出に、日本語のデータ送出も付け足しただけです。


app.js

var app = require('express').createServer()
  , io = require('socket.io').listen(app);

app.listen(20012);

app.get('/', function (req, res) {
  res.sendfile(__dirname + '/index.html');
});

io.sockets.on('connection', function (socket) {
  socket.emit('news', { hello: 'world' });
  socket.emit('news', { hello: '世界' });
  socket.on('my other event', function (data) {
      console.log(data);
    });
});


index.html

<script src="/socket.io/socket.io.js"></script>
<script>
  var socket = io.connect('http://localhost:20012/');
  socket.on('news', function (data) {
    console.log(data);
    socket.emit('my other event', { my: 'data' });
    socket.emit('my other event', { my: 'データ' });
  });
</script>


これはsocket.io v0.7.11では問題なく動きました。

しかし、最新のv0.8.0ではASCIIのデータは送られてくるものの、日本語のデータについては受け取ることが出来ません。


ほんとはsocket.ioのソース追って、デバッグすべきなんでしょうが、ちょっと今時間がないのと、まだスキル的にも厳しいので、どなたか対応していただけることを願います…