2012年2月3日金曜日

Titanium と no.de(Joyent) のSocket.io で WebSocket

というわけで、WebView ではなんか xhr-polling になるので、
Titanium自体で WebSocket しちゃう実装である、

ti-websocket-client.js を使ってみたんですが、

なんか、WebSocket で繋げない。

ti-websocket-client.js を使って、Socket.io を Titanium で使えるようにした、

Socket.io-titanium を使ってみるも、xhr-polling すらできない。
handshake はするけど、そこから先がタイムアウトして無限ループする。

サーバ側で、
    io.set("transports",["xhr-polling"]);
    io.set("polling duration",10);
みたいに、heroku と同じように xhr-polling を設定してみたけど、今度は Android エミュレータが強制終了した。

なんで WebSocket じゃなくて、xhr-polling になるんだろ。なんか、サーバが悪い気がしてきた。

で、そういや Windows でも node.js サーバ動かせるんだったーということで、
今 no.de で動かしているのをまんま Windows の node.js で動かして、
ローカルにある html ファイル と WebSocket でやりとりさせたら、
昨日はxhr-polling になった Chrome で 、 ちゃんと WebSocket で動きやがったよコンチクショー。
サーバが悪いのかー。かー。
Windows の node.js サーバ、 0.6.7 だからかな?関係ないか。
no.de のサーバマシン を別なのにしてみたけど、変わりなく。

ていうか、no.de のサーバマシンを新しいのにしたら、
npm で WARN invalid config node-version "v0.6" とか出てるし…

config.json

というファイルを作って、その中に、

{"version":"v0.6.8"}

とだけ書いて保存して push すればよいです。

あ、一応、no.de で No Space Commits とか言われたら、
server.js とか package.json とかの文字コードが UTF-8N CRLF の文字コードじゃないからだと思います。

んー。ローカルにある file://~/test.html が http://localhost:3000/ を開くから良いのであって、
file://~/test.html が http://hoge.no.de:80 を開くから、 xhr-polling になるのかなー。
Safariだと、ちゃんと no.de と WebSocket できるもんなー。

なんか、だんだんわけがわからなくなってきた。
とりあえず、xhr-polling だろうがなんだろうが、やりとりできりゃいいから、
Titanium 自体にWebSocketさせるのをやめて、WebView に WebSocket つか、xhr-polling させよ。

0 件のコメント:

コメントを投稿