質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

WebSocket

WebSocketとは双方向・全二重コミュニケーションのためのAPIでありプロトコルのことを指します。WebSocketはHTML5に密接に結びついており、多くのウェブブラウザの最新版に導入されています。

Q&A

解決済

1回答

10118閲覧

【node.js】websocket(wss)サーバ構築

kanimaru

総合スコア1013

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

WebSocket

WebSocketとは双方向・全二重コミュニケーションのためのAPIでありプロトコルのことを指します。WebSocketはHTML5に密接に結びついており、多くのウェブブラウザの最新版に導入されています。

0グッド

3クリップ

投稿2017/06/15 13:26

編集2017/06/15 13:27

質問:どのように構築すればwssサーバを構築できるでしょうか。

以下のようにNodeサーバでWebSocketサーバ(wss)を組んだつもりですが
chromeで確認した際にエラーとなり接続できませんでした。

これとは別に、httpsサーバをポートを変更し並行して構築していますが
そちらはhttpsで接続できています。ただ、opensslコマンドを用いた
自己認証の証明書です。そのためChromeでは、警告が初回に出ますが
無視して接続しております。
rsa 2048bit
sha256

###エラー内容:
始めはしたのエラーでした
ERR_SSL_VERSION_OR_CIPHER_MISMATCH
が色々弄ってるうちに
ERR_CONNECTION_CLOSED
になったりしました・・・。

javascript

1// サーバ 2let WebSocketServer = require('websocket').server; 3let https = require('http'); 4let port = xxxxx;// ポート番号です 5 6let fs = require('fs'); 7 8let pkey = fs.readFileSync('xxxxx_key.pem'); 9let pcert = fs.readFileSync('xxxxxx_crt.pem') 10let server = https.createServer(function(request, response) { 11 console.log((new Date()) + ' Received request for ' + request.url); 12 response.writeHead(404); 13 response.end(); 14}); 15 16 17server.listen(port, function() { 18 console.log((new Date()) + ' Server is listening on port'+port); 19}); 20let wsServer = new WebSocketServer({ 21 httpServer: server, 22 ssl: true, 23 key: pkey, 24 cert: pcert 25}); 26 27 28 29console.log('websocket server start. port=' + port); 30 31wsServer.on('connection', function(request) { 32 console.log('-- websocket connected --'); 33 console.log(request.origin); 34 var connection = request.accept('echo-protocol', request.origin); 35 console.log(request.origin); 36 connection.on('message', function(message) { 37 console.log(message); 38 }); 39}); 40

javascript

1クライアント 2 3 let wsUrl = 'wss://domain.js:xxxxx/';// ドメインとポート番号は伏せました。 4 let ws = new WebSocket(wsUrl, ['echo-protocol', "soap", "xmpp"]); 5 ws.onopen = function (evt) { 6 console.log('ws open()'); 7 }; 8 ws.onerror = function (err) { 9 console.error('ws onerror() ERR:', err); 10 }; 11

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

結論から言うと解決しました!

すみません、やってしまった感しかないんです。ほんと変な質問しました豆腐の角に
頭ぶつけて死に体レベルです。

色々認識が間違っていまして、根本的に見直しました。戒めのためにこのまま質問の
ソースは残します・・・。

ミスした理由:
・複数の資料を見ていたことによる、認識齟齬
・途中でnpmを変更したにもかかわらず、別資料ベースで組む
・npmのドキュメント読まなかった ※ダメぜったい!
・過度の飲酒はダメぜったい!

本当に利用するライブラリのマニュアル・ドキュメントはマジで読みなさい!!
だいたいサンプルコードもあるんですよ!!

以下が動作見直した動作コードです。なお、接続確立までしか載せてません。
確立後の処理は動作したので、行いたいような処理を実装すればいいかと。

javascript

1// wss server 2 3// ws 使ってるつもりでした。websocketのパッケージを利用してますね。 4let WebSocketServer = require('websocket').server; 5// websocket パッケージでwssってことは httpsサーバでたてないとなのに 6// httpで建ててるよ何してるんだろうね 7let https = require('https'); 8// httpサーバで待ち受けるポート番号 9let port = xxxxx; 10 11 12let fs = require('fs'); 13// SSL用のKEY 14let pkey = fs.readFileSync('key'); 15// SSL用の証明書 16let pcert = fs.readFileSync('crt'); 17 18// サーバオプション 19// WEBサーバはどっちだよ?httpsで待ち受けて、そっちで 20// SSL解釈するのでしょう! 21let serverOptions = { 22 key : pkey, 23 cert : pcert 24}; 25// カギと証明書つけてサーバ作るよ! 26let server = https.createServer( 27 serverOptions, 28 function(request, response) { 29 console.log((new Date()) + ' Received request for ' + request.url); 30 response.writeHead(404); 31 response.end(); 32}); 33 34// 指定したポートで接続待ち受けるよ!! 35server.listen(port, function() { 36 // 待ち受け処理出来たらコンソールに表示するよ! 37 console.log((new Date()) + ' Server is listening on port'+port); 38}); 39 40// サーバ立てるよ! 41// sslとかその辺全部HTTPSにぽいするし! 42// そもそもそんなパラメタWebSocketServer取らないし! 43// マニュアルドキュメント読め! 44let wsServer = new WebSocketServer({ 45 httpServer: server, 46 // ssl: true, 47 // key: pkey, 48 // cert: pcert }); 49 50 51// WebSocket開いたから接続まちポート表示するよ! 52console.log('websocket server start. port=' + port); 53 54// リクエストきた時の処理書くよ! 55wsServer.on("request",function(request){ 56 // 3うぇいはんどシェークの確立処理するよ! 57 // 第一引数はプロトコルだから、フロントとあわせないと 58 // 即死しちゃうゾ☆ 59 var connection = request.accept('echo-protocol', request.origin); 60 /* 61 以降にコネクション後の処理つらつらとかく。 62 */ 63});

投稿2017/06/16 00:05

kanimaru

総合スコア1013

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問