需要升级(node.js)

我使用webRTC制作了信令服务器。 这就是为什么我做了信令服务器(signaling.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。 但是,它列出了所需的升级。

我search了如何升级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 

在此之后,我访问了signaling.js

 /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 

看起来你正在尝试在同一个脚本中创build一个WebSockets客户端和服务器。

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

发生此错误的原因是您忘记在文件的顶部定义WebSocketvariables:

 var WebSocket = require('ws'); 

既然你想使用和你在Web浏览器中一样的方法( ws.onopenws.onerror ,…),我build议你使用websocket包,而不是w3cwebsocket模块。

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

在讨论这个问题之后,我想build议你完全删除'ws'包,而不是使用'websocket'

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

不要直接创buildWebSocket服务器,而应该先创build一个HTTP服务器:

 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 }); 

新的连接将触发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) {