---
title: Go + Pulsar WebSocket APIの利用事例 #pulsarjp
tags:  #pulsarjp  
author: [Yahoo!デベロッパーネットワーク](https://www.docswell.com/user/ydnjp)
site: [Docswell](https://www.docswell.com/)
thumbnail: https://bcdn.docswell.com/page/4EQX1V257P.jpg?width=480
description: Apache Pulsar Meetup Japan #2 発表資料 https://japan-pulsar-user-group.connpass.com/event/94276/
published: August 06, 18
canonical: https://www.docswell.com/s/ydnjp/5EVWEK-2018-08-06-144609
---
# Page. 1

![Page Image](https://bcdn.docswell.com/page/4EQX1V257P.jpg)

公開
Go + Pulsar WebSocket APIの
利用事例
2018年8月6日
スマートデバイス本部
大城卓
Cop yrig ht © 2 0 1 8 Yahoo Jap an Corp oration. All Rig hts Reserved .


# Page. 2

![Page Image](https://bcdn.docswell.com/page/KJ46RMLV71.jpg)

自己紹介
公開
大城 卓（オオシロ タカシ）
2
•
2012新卒入社
•
プラットフォーム開発本部(2012-2016)
社内PF開発 C++ PHP
•
スマートデバイス開発本部(2016-)
サーバサイド開発 C++ PHP Go
Cop yrig ht © 2 0 1 8 Yahoo Jap an Corp oration. All Rig hts Reserved .


# Page. 3

![Page Image](https://bcdn.docswell.com/page/LE1VQ8L47G.jpg)

目次
• スマートデバイス本部について
• システム概要・構成
• ハマったところ
• Pulsarを使ってみて
3
Cop yrig ht © 2 0 1 8 Yahoo Jap an Corp oration. All Rig hts Reserved .
公開


# Page. 4

![Page Image](https://bcdn.docswell.com/page/GEWLMZVZ72.jpg)

スマートデバイス本部について
• 将来の事業に大きな貢献をもたらすタネを
見つける
• スマホアプリの次を模索
https://mythings.yahoo.co.jp/
4
Cop yrig ht © 2 0 1 8 Yahoo Jap an Corp oration. All Rig hts Reserved .
公開


# Page. 5

![Page Image](https://bcdn.docswell.com/page/47ZMQ14LE3.jpg)

システム概要
WebAPI
•
•
•
•
5
クライアントのデータをDBに
蓄積したい
トラフィックは小さい
レスポンスは速くしたい
コード流用のため、
Apache + PHPで構築
Cop yrig ht © 2 0 1 8 Yahoo Jap an Corp oration. All Rig hts Reserved .
公開


# Page. 6

![Page Image](https://bcdn.docswell.com/page/YJ6N6L3MJV.jpg)

公開
システム構成
リクエスト
WebSocket
WebAPI
WebSocket
Pulsar
(Broker)
OpenStack
Apache
PHP
6
Cop yrig ht © 2 0 1 8 Yahoo Jap an Corp oration. All Rig hts Reserved .
MySQL
Consumer
Cloud Foundry
Go言語


# Page. 7

![Page Image](https://bcdn.docswell.com/page/GJ5561LQJ4.jpg)

公開
ハマったところ
Consumerが返したAckをBrokerが受け取ってくれない
→ LB(ロードバランサ)のセッション維持時間が2分だった
→ LBのセッション情報が2分で消え、パケットが破棄
されていた
Message
LB
Pulsar
(Broker)
7
Ack
Consumer
Cop yrig ht © 2 0 1 8 Yahoo Jap an Corp oration. All Rig hts Reserved .


# Page. 8

![Page Image](https://bcdn.docswell.com/page/LE3NQ1LZE5.jpg)

定期的なPing送信
https://tools.ietf.org/html/rfc6455#section-5.5.2
// Ping
go func() {
ticker := time.NewTicker(time.Minute)
defer ticker.Stop()
for {
select {
case &lt;-ticker.C:
conn.WriteMessage(websocket.PingMessage, []byte{})
定期的にPing送信する
Goroutine
}
}
}()
// Consume
go func() {
for {
m := msg{}
conn.ReadJSON(&amp;m)
conn.WriteJSON(res{MessageID: m.ID}) // Ack
// DB登録処理
Messageを受け取り、DBに
書き込むGoroutine
}
8
}()
Cop yrig ht © 2 0 1 8 Yahoo Jap an Corp oration. All Rig hts Reserved .
公開


# Page. 9

![Page Image](https://bcdn.docswell.com/page/8EDW9XN47G.jpg)

Pulsarを使ってみて
• WebSocket APIで言語を選ばず使える
• 各言語のWebSocket実装を参考にできる
• Athenz認証の学習コストが高い
• 運用はこれからです
9
Cop yrig ht © 2 0 1 8 Yahoo Jap an Corp oration. All Rig hts Reserved .
公開


# Page. 10

![Page Image](https://bcdn.docswell.com/page/V7P9ZP5VJ8.jpg)

公開
おわり
Cop yrig ht © 2 0 1 8 Yahoo Jap an Corp oration. All Rig hts Reserved .


