LoginSignup
1

More than 5 years have passed since last update.

ElectronバックエンドとサーバとのWebSocket通信でつまずいた件

Posted at

ことの発端

小規模な社内向けWebサービスで、データが変更されたことを通知するためにWebSocketを通信している。
そのWebサービスはキオスク化したPCからも見れるようになっているのだが、以前はChromeで全画面表示にしていた。
しかしユーザの認識のため認証させていたサービスなので、いちいちログイン画面を出すのはカッコ悪い。キオスクにはキオスクの口を用意し、各端末を認識できるようなしくみも作るべくElectronクライアントを作成した。

キオスク化すると長時間同じページを表示し続けることになるので、システムアップデート時などロジック含めての更新をしたい場合、View側からリロードをかけるもうまくいかない症状(タッチパネルが効かなくなるなど)が出ており、バックエンド側でWebSocket通信することに。

どうにも上手くいかない・・・
コネクション時に403エラーが出る。
Viewは相変わらず、きちんと繋がるのに。。。

この時点でお察しの方はいらっしゃると思うが、単にクロスドメイン問題に引っかかっていただけである。
認証関係なのはわかっているのに闇雲に新規実装中のnode側ばかりを疑って時間を溶かしてしまった。

node側は file://~~~ のようにローカルでうごいてて、
View側は http://~~~ でアクセスしているから上手くいっていた。

この社内サービスのサーバー側はgo+ginで書いているので、

func (p *App) websocketConnect(c *gin.Context) {
    handler := websocket.Handler(p.SocketServer.WebsocketHandler())
    handler.ServeHTTP(c.Writer, c.Request)
}

これを

func (p *App) websocketConnect(c *gin.Context) {
    s := websocket.Server{Handler: p.SocketServer.WebsocketHandler()}
    s.ServeHTTP(c.Writer, c.Request)
}

とするだけで、うまく接続できた。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1