2016-10-18 24 views
2

webRTCを使用してシグナリングサーバを作成しました。 これがシグナリングサーバ(signaling.js)を作った理由です。アップグレードが必要(node.js)

この問題を解決するにはどうすればよいですか?

・signaling.js

"use strict"; 


let WebSocketServer = require('ws').Server; 
let port = 3001; 
let wsServer = new WebSocketServer({ port: port }); 
console.log('websocket server start. port=' + port); 

wsServer.on('connection', function(ws) { 
    console.log('-- websocket connected --'); 
    ws.on('message', function(message) { 
    wsServer.clients.forEach(function each(client) { 
     if (isSame(ws, client)) { 
     console.log('- skip sender -'); 
     } 
     else { 
     client.send(message); 
     } 
    }); 
    }); 
}); 

function isSame(ws1, ws2) { 
    // -- compare object -- 
    return (ws1 === ws2); 
} let wsUrl = 'ws://localhost:3001/'; 
    let ws = new WebSocket(wsUrl); 
    ws.onopen = function(evt) { 
    console.log('ws open()'); 
    }; 
    ws.onerror = function(err) { 
    console.error('ws onerror() ERR:', err); 
    }; 

    ws.onmessage = function(evt) { 
    console.log('ws onmessage() data:', evt.data); 
    let message = JSON.parse(evt.data); 
    if (message.type === 'offer') { 
    // -- got offer --- 
    console.log('Received offer ...'); 
    textToReceiveSdp.value = message.sdp; 
    let offer = new RTCSessionDescription(message); 
    setOffer(offer); 
    } 
    else if (message.type === 'answer') { 
    // --- got answer --- 
    console.log('Received answer ...'); 
    textToReceiveSdp.value = message.sdp; 
    let answer = new RTCSessionDescription(message); 
    setAnswer(answer); 
    } 
}; 

function sendSdp(sessionDescription) { 
    console.log('---sending sdp ---'); 

    textForSendSdp.value = sessionDescription.sdp; 
    /*--- テキストエリアをハイライトするのを止める 
    textForSendSdp.focus(); 
    textForSendSdp.select(); 
    ----*/ 

    // --- シグナリングサーバーに送る --- 
    let message = JSON.stringify(sessionDescription); 
    console.log('sending SDP=' + message); 
    ws.send(message); 
    } 

私は "signaling.js" をロードすると、私はnode.js.を設定 その後、私はsignaling.jsにアクセスします。 ただし、アップグレードが必要です。

node.jsをアップグレードする方法を検索しました。

私はこの後

Linux/Mac: 

The module n makes version-management easy: 

sudo npm install n -g 
sudo n 0.12.2 
For the latest stable version: 

sudo n stable 
For the latest version: 

sudo n latest 

を試してみました、私はあなたが同じスクリプト内でのWebSocketクライアントとサーバーを作成しようとしているよう

/signaling.js:26 
    let ws = new WebSocket(wsUrl); 
      ^

ReferenceError: WebSocket is not defined 
    at Object.<anonymous> (/Users/Desktop/webRTC/signaling.js:26:16) 
    at Module._compile (module.js:570:32) 
    at Object.Module._extensions..js (module.js:579:10) 
    at Module.load (module.js:487:32) 
    at tryModuleLoad (module.js:446:12) 
    at Function.Module._load (module.js:438:3) 
    at Module.runMain (module.js:604:10) 
    at run (bootstrap_node.js:394:7) 
    at startup (bootstrap_node.js:149:9) 
    at bootstrap_node.js:509:3 
+0

使用する前に 'WebSocket'を含むパッケージを' require 'する必要があります。 –

+0

WebSocketでパッケージを入手するにはどうすればよいですか? – tk08

+0

[docs](https://www.npmjs.com/package/ws)を見てみると、 'WebSocket'を初期化する前に' let WebSocket = require( 'ws'); 'を実行しなければならないと思います。 –

答えて

1

が見えるsignaling.jsにアクセスしました。あなたは、ファイルの先頭にWebSocket変数を定義するために忘れてしまったので

/signaling.js:26 
    let ws = new WebSocket(wsUrl); 
      ^

ReferenceError: WebSocket is not defined 

このエラーが発生します。

var WebSocket = require('ws'); 

は、Webブラウザ内と同じように、あなたが同じメソッドを使用したいので

、 ( ws.onopen,、...)、代わりに w3cwebsocketモジュールを使用して websocketパッケージを使用することをお勧めします。

var WebSocket = require('websocket').w3cwebsocket; 

コメント内の問題を議論した後、私はあなたが完全に'ws'パッケージを削除し、代わりに'websocket'を使用することをお勧めしたいと思います。

var server = http.createServer(function(request, response) { 
    console.log((new Date()) + ' Received request for ' + request.url); 
    response.writeHead(404); 
    response.end(); 
}); 
server.listen(8080, function() { 
    console.log((new Date()) + ' Server is listening on port 8080'); 
}); 

そして、その上でのWebSocketサーバーを添付:

wsServer = new WebSocketServer({ 
    httpServer: server, 
    autoAcceptConnections: false 
}); 

新しい接続をトリガする代わりに、直接のWebSocketサーバーを作成するには、まずHTTPサーバーを作成する必要があります

var WebSocketServer = require('websocket').server; 

requestイベントの場合、着信接続を受け入れる必要があります。

// wsServer.on('connection', function(ws) { 
wsServer.on('request', function(request) { 
    var ws = request.accept(); 

connectionsプロパティでクライアントリストを取得できます。

// wsServer.clients.forEach(function each(client) { 
wsServer.connections.forEach(function each(client) { 
+0

を参照してください。 ( ノードsignaling.js module.js;しかし、新しいエラーがあります:471 スローERR;^ エラー:469:(module.js Function.Module._resolveFilenameでモジュール 'のWebSocket' を見つけることができません15) at Function.Module._load(module.js:417:25) at Module.require(module.js:497:17) at require(internal/module.js:20:19) – tk08

+0

私は を追加しました var webSocket = require( 'websocket').w3cwebsocket; ファイルの先頭に "singnaling.js"。 – tk08

+0

あなたは 'websocket'パッケージをインストールする必要があります。次のコマンドを実行してみてください'npm install --save websocket' –

関連する問題