(追記 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のソース追って、デバッグすべきなんでしょうが、ちょっと今時間がないのと、まだスキル的にも厳しいので、どなたか対応していただけることを願います…