c言語なwebsocketの遊び方。
TRANSCRIPT
C言語なWebSocketの遊び方。
はしもとまさ2015/5/9 OsunC Kawagoe 2015
自己紹介。
● 東海道らぐの(元)名古屋案内人。– 東海道らぐ: 通称「あひる焼きらぐ」。(理由はさておき)
– 静岡、名古屋、大阪を中心に活動しているLinux User Group です。
● ちびぎーこ保護者会もちょっと絡んでいる
– ちびぎーこ保護者会: 別名「日本openSUSEユーザ会」
● 最近、おーぷん万葉プロジェクトを開始しました。
– 日本語入力環境をどうにかしよう!というプロジェクト。
3
おーぷん万葉プロジェクトとは?
● 目的「自由な日本語入力環境を手に入れよう!」
● 現状の問題点:– ビックデータと叫ばれる時代に、開発がアクティブで
自由にコミットメントできる日本語入力システムがない?● 例: mozc, Anthy... (但し、SKKを除く!)
ibus-mozc は開発停止とか!???
→ そんな現状を打破したい!てのが目的です。
今日はWebSocketのお話。
現在おーぷん万葉プロジェクトでは、新しい仕組みのかな漢字変換ソフトを研究しています。
その中のひとつが
WebSocket + JSON !!!
皆さん WebSocket はご存知ですか〜???
5
WebSocketとは?
● RFC 6455で定義されている新しい通信規格● 一度コネクションをはってしまえば
つなぎっぱなしという双方向通信の規格です。
クライアント サーバー
リクエスト
レスポンス (Upgrade)
通信確立
どちらから送信してもOK
6
WebSocket のライブラリ
● WebSocket が利用できる言語は結構あります。
● 初めての方はこの辺りがオススメ!– Node-js : socket.io、websocket.io
– Java : 標準ライブラリに実装済み
● その他、C/C++, Ruby, Python 等ももちろん実装があります。
7
C言語ライブラリ: cwebsocket
● cwebsocket : MITライセンスのライブラリ
– https://code.google.com/p/cwebsocket/
● ソースコードは 300行ほどの 1ファイルのみ!
● HTTPリクエストのパース&フレーム作成のみの実装のため、非常に組み込みやすい!– MITライセンスなオープンソースですし。。。
8
簡単な使い方(1)
1. socket() : ソケット作成
2. bind() : ソケットに名前&ポート番号をつける
3. listen() : キュー作成
4. accept() : クライアント受付
5. recv() : データ受信
ここまではふつーのソケットプログラミングと全く一緒!
9
簡単な使い方(2)
6. 受信したデータのパース– wsParseHandshake() : ハンドシェイクのパース
– wsParseInputFrame() : ハンドシェイク後データのパース
7. データ作成
– wsMakeFrame() : 返信するデータからフレーム作成
8. send() : で、最後にデータ送信!っと。
10
簡単ですよね!??(ぇ
注:多分C言語に慣れてる人は納得してもらえるかと^^;
11
利用時のポイント。
accept() でクライアントと通信を始めた際に、スレッドを作成した方がいいかも。
accept() を拾ったら、別スレッドで send/recv を繰り返しましょう。
理由:– 通信が繋ぎっぱなしなので、accept() が一度しか来ません
この辺りがふつーのHTTPサーバと違いますよね…(というか実験中、これで「あれ?ハンドシェイクが来ない!!」とはまってしまったおいらorz)
12
ちょとしたデモ。(実演)
13
まとめ。
● WebSocket は新しい時代の通信プロトコルだ!
● 非常にシンプルなのはとてもいいこと!
…という話には、実は私は懐疑的だったりします^^;(似たようなものはいろいろ出てきていますし。。。)
14
ご清聴、ありがとうございました。