c言語なwebsocketの遊び方。

14
C言語なWebSocketの遊び方。 はしもとまさ 2015/5/9 OsunC Kawagoe 2015

Upload: masahiko-hashimoto

Post on 20-Jul-2015

367 views

Category:

Technology


5 download

TRANSCRIPT

Page 1: C言語なWebSocketの遊び方。

C言語なWebSocketの遊び方。

はしもとまさ2015/5/9 OsunC Kawagoe 2015

Page 2: C言語なWebSocketの遊び方。

自己紹介。

● 東海道らぐの(元)名古屋案内人。– 東海道らぐ: 通称「あひる焼きらぐ」。(理由はさておき)

– 静岡、名古屋、大阪を中心に活動しているLinux User Group です。

● ちびぎーこ保護者会もちょっと絡んでいる

– ちびぎーこ保護者会: 別名「日本openSUSEユーザ会」

● 最近、おーぷん万葉プロジェクトを開始しました。

– 日本語入力環境をどうにかしよう!というプロジェクト。

Page 3: C言語なWebSocketの遊び方。

3

おーぷん万葉プロジェクトとは?

● 目的「自由な日本語入力環境を手に入れよう!」

● 現状の問題点:– ビックデータと叫ばれる時代に、開発がアクティブで

自由にコミットメントできる日本語入力システムがない?● 例: mozc, Anthy... (但し、SKKを除く!)

ibus-mozc は開発停止とか!???

→ そんな現状を打破したい!てのが目的です。

Page 4: C言語なWebSocketの遊び方。

今日はWebSocketのお話。

現在おーぷん万葉プロジェクトでは、新しい仕組みのかな漢字変換ソフトを研究しています。

その中のひとつが

WebSocket + JSON !!!

皆さん WebSocket はご存知ですか〜???

Page 5: C言語なWebSocketの遊び方。

5

WebSocketとは?

● RFC 6455で定義されている新しい通信規格● 一度コネクションをはってしまえば

つなぎっぱなしという双方向通信の規格です。

クライアント サーバー

リクエスト

レスポンス (Upgrade)

通信確立

どちらから送信してもOK

Page 6: C言語なWebSocketの遊び方。

6

WebSocket のライブラリ

● WebSocket が利用できる言語は結構あります。

● 初めての方はこの辺りがオススメ!– Node-js : socket.io、websocket.io

– Java : 標準ライブラリに実装済み

● その他、C/C++, Ruby, Python 等ももちろん実装があります。

Page 7: C言語なWebSocketの遊び方。

7

C言語ライブラリ: cwebsocket

● cwebsocket : MITライセンスのライブラリ

– https://code.google.com/p/cwebsocket/

● ソースコードは 300行ほどの 1ファイルのみ!

● HTTPリクエストのパース&フレーム作成のみの実装のため、非常に組み込みやすい!– MITライセンスなオープンソースですし。。。

Page 8: C言語なWebSocketの遊び方。

8

簡単な使い方(1)

1. socket() : ソケット作成

2. bind() : ソケットに名前&ポート番号をつける

3. listen() : キュー作成

4. accept() : クライアント受付

5. recv() : データ受信

ここまではふつーのソケットプログラミングと全く一緒!

Page 9: C言語なWebSocketの遊び方。

9

簡単な使い方(2)

6. 受信したデータのパース– wsParseHandshake() : ハンドシェイクのパース

– wsParseInputFrame() : ハンドシェイク後データのパース

7. データ作成

– wsMakeFrame() : 返信するデータからフレーム作成

8. send() : で、最後にデータ送信!っと。

Page 10: C言語なWebSocketの遊び方。

10

簡単ですよね!??(ぇ

注:多分C言語に慣れてる人は納得してもらえるかと^^;

Page 11: C言語なWebSocketの遊び方。

11

利用時のポイント。

accept() でクライアントと通信を始めた際に、スレッドを作成した方がいいかも。

accept() を拾ったら、別スレッドで send/recv を繰り返しましょう。

理由:– 通信が繋ぎっぱなしなので、accept() が一度しか来ません

この辺りがふつーのHTTPサーバと違いますよね…(というか実験中、これで「あれ?ハンドシェイクが来ない!!」とはまってしまったおいらorz)

Page 12: C言語なWebSocketの遊び方。

12

ちょとしたデモ。(実演)

Page 13: C言語なWebSocketの遊び方。

13

まとめ。

● WebSocket は新しい時代の通信プロトコルだ!

● 非常にシンプルなのはとてもいいこと!

…という話には、実は私は懐疑的だったりします^^;(似たようなものはいろいろ出てきていますし。。。)

Page 14: C言語なWebSocketの遊び方。

14

ご清聴、ありがとうございました。